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 尝试在Backbone.js中设置模型对象时发生TypeError_Javascript_Backbone.js - Fatal编程技术网

Javascript 尝试在Backbone.js中设置模型对象时发生TypeError

Javascript 尝试在Backbone.js中设置模型对象时发生TypeError,javascript,backbone.js,Javascript,Backbone.js,我一直在使用backbone.js+cordova+require.js框架,这些框架主要基于Cristophe Coenraets。在视图中显示我的模型似乎很简单,但我仍然无法通过调用set或save来更新模型 我的模型看起来像这样: SourcePhrase = Backbone.Model.extend({ // default values defaults: { id: null, markers: "",

我一直在使用backbone.js+cordova+require.js框架,这些框架主要基于Cristophe Coenraets。在视图中显示我的模型似乎很简单,但我仍然无法通过调用set或save来更新模型

我的模型看起来像这样:

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
我可以通过拨打电话获取以下信息,从我的收藏中提取对象:

// 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"

好吧,我想我可能找到了,也许?在我看来,只有一个项目:

initialize: function () {
    this.model.bind('change', this.render());
    this.render();
},
bind()调用导致了TypeError,这意味着我可能遇到了“this”问题?(.)无论如何,我已经用这个块替换了这个块:

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

这似乎奏效了。如果有更精通backbone.js的人能对这种方法发表评论,我将非常感谢。我这样做正确吗?

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

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

它会工作。

设置
行之前放置一个
控制台.log(model)
。输出是什么?@msvalkon:Added。看起来它正在按引用复制(我想这是预期的?)--集合被设置为集合对象。你是对的,我删除了我的答案。嗨,Rida,对不起--bind方法仍然抛出TypeError,即使在将“this”添加为第三个参数时也是如此-/很抱歉,我将
this.render()
替换为
this.render
尝试了一下,您的代码也可以运行。谢谢