2012-09-12 64 views
0

我遇到了使用敲除映射的問題。敲除映射不起作用

我有FormBuilderViewModel,含有一組函數包括加載和保存數據。第一行(自後=此)如下:

this.form = ko.mapping.fromJS({blueprint_identifier: undefined, name: undefined, description: undefined, pages : []})

我初始化 'this.form' 與3元變量和1個陣列。

然後,我加載數據(也以FormBuilderViewModel):

ko.mapping.fromJSON(allData, {}, self.form);

可變allData來自AJAX請求和精確地包含這樣的: {"blueprint_identifier":1347437911,"name":"test","description":"test","pages":[]}

的問題是:所加載的JSON從不出現在我的頁面上。加載數據後console.log(this.form)的輸出爲空。這裏就是整個腳本(除了功能等):

var FormBuilderViewModel = function(data){ 
    var self = this; 

    this.form = ko.mapping.fromJS({ 
        blueprint_identifier: undefined, 
        name: undefined, 
        description: undefined, 
        pages : [] 
       }) 

    $.getJSON("x", function(allData) { 
     if(){ 
      console.log("I'm here"); 
      ko.mapping.fromJSON(allData, {}, self.form); 
     }else{ 
      // not relevant 
     } 
    }); 
    console.log(self.form); 
}; 

輸出是「我在這裏」(所以我們得到的負載點),然後空「形式」的對象。

缺少什麼我在這裏?

回答

1

這裏是一個功能小提琴,做你在找什麼:

http://jsfiddle.net/jearles/Cm4xS/

我使用空的observable初始化表單,然後在AJAX調用返回時加載它。通過使用with綁定,我不會嘗試在加載之前顯示錶單。

0

$.getJSON功能工作async所以當你打電話console.log(self.form)映射沒有完成。 要查看控制檯輸出移動日誌操作你的對象轉化爲成功的功能:

$.getJSON("x", function(allData) { 
    if(){ 
     console.log("I'm here"); 
     ko.mapping.fromJSON(allData, {}, self.form); 
     console.log(self.form); 
    }else{ 
     // not relevant 
    } 
}); 

嘗試使用ko.mapping.fromJS,而不是ko.mapping.fromJSON因爲allData不是字符串fromJSON預期:

$.getJSON("x", function(allData) { 
    if(){ 
     console.log("I'm here"); 
     ko.mapping.fromJS(allData, {}, self.form); 
     console.log(self.form); 
    }else{ 
     // not relevant 
    } 
}); 
+0

它也沒有出現在我的頁面上。 self.form永遠不會改變。成功函數中的console.log(self.form)給出了相同的結果。 – Sherlock

+0

查看更新後的帖子。 –