使用Backbone.js中的更新值保存数据

时间:2013-11-30 19:20:58

标签: backbone.js backbone-events

我正在使用Backbone.js开发MVC应用程序。

假设我有一个用户详细信息: -

var userDetailsView = Backbone.View.extend({
    model: userModel,
    el: "#userDteails",
    template: Handlebars.templtas.userDetails
    initialize: function () {
        this.model = new userModel();

        this.model.fetch({
            success: function (data) {
                this.render();
            }
        });
    },
    render: function () {
        $(this.el).html(this.template());
    },
    events: {
        "", "saveUserDetails" //event for save
    },
    saveUserDetails: function () {
        //How do I get the update value of FirstName??
    }
});

现在,在类似的行中,我有一个处理用户模型编辑细节的车把模板。

<div id="userDetails">
  <input type="text" value="{{FirstName}}" id="firstName"/>
 </div>

请忽略代码错误,因为它只是一个虚拟代码,现在如果我需要保存用户详细信息(例如,例如FirstName)。然后我如何获得更新的值?

应该是: -

saveUserDetails: function () {
        //How do I get the update value of FirstName??
        this.model.set("", $('#Firstname').val());
    }

或者我应该关注converting form data to JSON,并更新我的this.model,即使用name属性创建我的HTML标记: -

<form>
    First Name:<input type="text" name="Fname" maxlength="12" size="12"/> <br/>
</form>

并使用Tobias Cohen

建议的功能
$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

并做: -

$('form').submit(function() {
        $('#result').text(JSON.stringify($('form').serializeObject()));
        return false;
    });

我不是Backbone的专家,但已经看过至少10-15个教授骨干的样本和教程。其中我找到了上述两种方法。

请让我知道,最好的方法是什么。

1 个答案:

答案 0 :(得分:0)

两种方式都可以!这取决于您的HTML&lt; - &gt;的复杂程度模型映射是。如果所有事情都可以使用带有名称/数据名称的div / span / input或者任何漂浮在你船上的东西来完成,那么序列化路线很简单。但是一旦你长大了,你可能会看到更多的自定义方式,这在技术上类似于你的第一个选项,只是从输入字段获得.val()的更多逻辑。

我不太了解你的两个示例处理,但你说不要担心细节...所以:)对于表单一,我假设.text()仅用于调试目的?正确的代码可能首先阻止表单提交上的Default()然后执行一个model.save($('form')。serializeObject())来更新模型并同时将其保存在服务器上。有一些成功/错误回调,以便进行测量!