2012-08-07 64 views
3
class ViewModel 
    constructor: -> 
    $.ajax({url: '#.json', type: 'GET', dataType: 'json'}) 
    .done @buildModel 

    buildModel: (data) => 
    @model = ko.mapping.fromJS(data) 
    @model.update = => 
     delete @model.update 
     jsonForm = ko.mapping.toJSON(@model) 
     $.ajax({url: '#.json', data: jsonForm, type: 'PUT', contentType:"application/json; charset=utf-8", dataType: 'json'}) 
     .done @buildModel 

    ko.applyBindings(@model) 

################################################################### 

class FormViewModel extends ViewModel 
    buildModel: => 
    super() 

如果我把這叫做:繼承和knockoutjs

$(document).bind 'pageinit', => 
    @form = new ViewModel 

一切都很好。如果我嘗試繼承

$(document).bind 'pageinit', => 
    @form = new FormViewModel 

得到一個錯誤:

Uncaught Error: Unable to parse bindings. 
Message: ReferenceError: update is not defined; 
Bindings value: click: update 

爲什麼ko.applyBindings是不滿意這點繼承?

回答

2

使用super而不是super()FormViewModelbuildModel功能。

  • super()表示:調用相同名稱的父方法,不帶任何參數。
  • super表示:調用與我收到的任何參數相同的名稱的父方法。

所以這個小類總是調用父類型爲buildModel的函數,其中data = undefined

另請注意,我認爲您不應該在buildModel函數中調用ko.applyBindings。該調用應該只需要針對整個視圖模型發生一次。

+0

非常感謝! – Jonas 2012-08-09 13:06:31