我一直在使用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"
答案 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专业知识的人可以评论这种方法,我将非常感激。我这样做了吗?