Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从主干中的表单更新模型_Javascript_Backbone.js_Input_Views_Models - Fatal编程技术网

Javascript 从主干中的表单更新模型

Javascript 从主干中的表单更新模型,javascript,backbone.js,input,views,models,Javascript,Backbone.js,Input,Views,Models,我正在使用主干网和Laravel创建一个简单的应用程序来管理预订,我正在开发一个简单的表单来更新当前登录用户的用户数据 我想知道,有没有比我现在做的更好、更有效的方法,用表单中的输入数据更新您的模型 我在模型中创建了一个名为update的方法,它被传递给表单的DOM对象。我想这不是最好的办法 任何帮助都将不胜感激 var Account = Backbone.Model.extend({ url: "/settings/account", initialize: functi

我正在使用主干网和Laravel创建一个简单的应用程序来管理预订,我正在开发一个简单的表单来更新当前登录用户的用户数据

我想知道,有没有比我现在做的更好、更有效的方法,用表单中的输入数据更新您的模型

我在模型中创建了一个名为update的方法,它被传递给表单的DOM对象。我想这不是最好的办法

任何帮助都将不胜感激

var Account = Backbone.Model.extend({

    url: "/settings/account",

    initialize: function()
    {

    },

    update: function(form)
    {
        this.set({
            first_name : form.find('#first-name').val(),
            last_name : form.find('#last-name').val(),
            email : form.find('#email').val(),
            landline: form.find('#landline').val(),
            mobile: form.find('#mobile').val()
        });

        return this.save();
    }

});

var user = new Account;

var AccountView = Backbone.View.extend({

    el: $("div.section"),

    template: _.template($("#account-template").html()),

    events: {
        "submit #account": "update"
    },

    initialize: function()
    {
        _.bindAll(this, 'render', 'update');
        this.render();
    },

    render: function()
    {
        $(this.el).html(this.template(this.model.toJSON()));
    },

    update: function()
    {
        var form = $(this.el).find('form#account');

        user.update(form);

        $(this.el).find('.alert-success').show();

        return false;
    }

});

var Router = Backbone.Router.extend({

    routes: {
        "account": "account"
    },

    account: function()
    {
        user.fetch({
            success: function()
            {
                return new AccountView({model:user});
            }
        });         
    }

});

当模型知道它的视图时,它被认为是糟糕的设计。我将对视图编排的模型进行更新

我认为最简单的方法是在视图中这样做:

update: function()
{
    var form = $(this.el).find('form#account');
    user.set({
        first_name : form.find('#first-name').val(),
        last_name : form.find('#last-name').val(),
        email : form.find('#email').val(),
        landline: form.find('#landline').val(),
        mobile: form.find('#mobile').val()
    });

    user.save();
    $(this.el).find('.alert-success').show();
    return false;
}

否则,模型必须知道在哪里检索值。此外,当您有一天使用不同的视图时,您还必须更改模型类。

我正要写同样的东西。您应该将用户模型传递到视图中,而不是将视图传递给用户。然后,视图可以使用
update()
函数设置用户的值。否则就很好了。通过执行
user.save({'attribute':'value}),您可以
set()
并在一次调用(快捷方式)中保存数据是什么触发了对视图的“更新”调用?我有一个绑定到表单的视图,但我只想在用户单击提交按钮后使用save()更新模型并持久化数据