2014-02-17 54 views
0

我一直在使用backbone.js + cordova + require.js框架,主要基於Cristophe Coenraets的PhoneGap examples on GitHub。在視圖中顯示我的模型似乎很簡單,但我仍然無法通過調用更新模型來設置或保存。TypeError試圖在Backbone.js中設置模型對象

我的模型看起來是這樣的:

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 )')

嗯......那是不對的。任何想法,我需要開始尋找跟蹤此?

編輯:控制檯輸出模式只是調用之前設置:

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

在'set'行之前放置'console.log(model)'。什麼是輸出? – msvalkon

+0

@msvalkon:已添加。它看起來像在做一個引用副本(我認爲這是預期的) - 集合被設置爲集合對象。 – eb1

+0

你是對的,我刪除了我的答案。 –

回答

1

是的,它是用正確的方法,你甚至可以改變你這樣的代碼:

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

,它會工作。

+0

嗨裏達,抱歉 - 即使添加「this」作爲第三個參數,綁定方法仍然會拋出TypeError。 : -/ – eb1

+0

對不起,我用'this.render'替換了'this.render()' –

+0

有機會嘗試一下,並且你的代碼也能正常工作。謝謝! – eb1

0

好吧,我想我可能已經跟蹤它,也許?我曾在我的信息查看單個項目:

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

的bind()調用是造成類型錯誤,這意味着我可能已經運行到一個「本」的問題? (backbone.js and binding "this")無論如何,我已經取代了塊與此一:

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

似乎這樣的伎倆。如果有更多backbone.js專業知識的人可以對此方法發表評論,我會非常感激。我是否正確地做這件事?

相關問題