2012-09-12 43 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

查看更新后的帖子。 –