尝试在Backbone.js中设置模型对象的TypeError

时间:2014-02-17 23:13:05

标签: javascript backbone.js

我一直在使用backbone.js + cordova + require.js框架,主要基于Cristophe Coenraets'PhoneGap examples on GitHub。在视图中显示我的模型似乎很简单,但我仍然无法通过设置或保存调用来更新模型。

我的模型看起来像这样:

SourcePhrase = Backbone.Model.extend({
    // default values
    defaults: {
            id: null,
            markers: "",
            orig: null,
            source: "",
            target: ""
    },

    sync: function (method, model, options) {
        if (method === "read") {
            findById(this.id).done(function (data) {
                options.success(data);
            });
        }
    }
}), 
// etc

我可以通过调用get:

将对象从我的集合中拉出来
// find and update the model object
var strID = $(event.currentTarget.parentElement).attr('id'); 
var model = this.collection.get(strID);

到目前为止,非常好:

model.set('target', trimmedValue);

TypeError:'undefined'不是函数(评估'(i = t [r])。callback.call(i.ctx,n,a)')

嗯......那不对。知道我需要在哪里开始寻找跟踪它吗?

编辑:在调用set之前模型的控制台输出:

model: Object
_changing: false
_events: Object
_pending: false
_previousAttributes: Object
attributes: Object
id: "RUT001-10"
markers: "\hdr"
orig: null
source: "Ruth"
target: "Ruth"
__proto__: Object
changed: Object
cid: "c15"
collection: Object
id: "RUT001-10"
__proto__: Object
strID: "RUT001-10"

2 个答案:

答案 0 :(得分:1)

是的,这是正确的使用方法,您甚至可以像这样更改代码:

this.model.bind('change', this.render, this);

它会起作用。

答案 1 :(得分:0)

好吧,我想我可能已经跟踪了它,也许吧?我在我的视图中有一个项目:

initialize: function () {
    this.model.bind('change', this.render());
    this.render();
},

bind()调用导致了TypeError,这意味着我可能遇到了“这个”问题? (backbone.js and binding "this"。)无论如何,我用这个替换了块:

initialize: function () {
    this.listenTo(this.model, 'change', this.render);
},

似乎可以解决这个问题。如果拥有更多backbone.js专业知识的人可以评论这种方法,我将非常感激。我这样做了吗?