在Backbone应用程序中使用keyup事件更新模型

时间:2014-10-18 21:54:58

标签: javascript backbone.js javascript-events

我正在尝试更新每个keyup事件的模型。模型的属性将在模板中使用。所以它们应该在页面加载之前定义。我已经定义了null。但是当输入内容时,我无法从控制台更新它们。

这样做的正确方法是什么?我错过了什么?

loginview片段:

events: {
            'keyup input' : 'updateModel',
            'click #loginbutton' : 'login',
            'click #renderregisterbutton' : 'render_register',
        },
        updateModel: function(e){
            e.preventDefault();
            var elm = e.target;
            FormsDataModelInst[ elm.id ] = $( elm ).val();
            this.model.set( FormsDataModelInst );
            console.log( "1-FormsDataModelInst:" + JSON.stringify( FormsDataModelInst.attributes ) );
            console.log( "2-this.model.set(...):" + JSON.stringify(this.model.attributes) );
            console.log( e );
            console.log( e.target );
            console.log( elm );
            console.log( elm.id );
            console.log( $( elm ).val() );              
        },

formsdatamodel:

define([
    'underscore',
    'backbone',
    ],
    function(_, Backbone) {
        var FormsDataModel = Backbone.Model.extend({

            urlRoot: null,

            defaults: {
                username: null,
                phone: null,
                email: null,
            },
        });

        return new FormsDataModel();
});

1 个答案:

答案 0 :(得分:0)

应该使用行

        FormsDataModelInst.set( elm.id, $( elm ).val() );

而不是

        FormsDataModelInst[ elm.id ] = $( elm ).val();

这解决了这个问题。使用主干的utilitess就像set()一样,只需设置和保存其他模型等等.FormsDataModelInst的模型也是一个Backbone模型。