【问题标题】:Knockout JS will not update mapped objectKnockout JS 不会更新映射对象
【发布时间】:2013-04-25 09:32:28
【问题描述】:

我对 Knockout JS 很陌生。在使用淘汰赛 js 进行映射时,我没有通过 Google 找到太多帮助。我有一个来自服务器的 JSON。我用淘汰赛 js 映射库映射 JSON。与该属性关联的数据绑定 dom 不会更新。 我已经包含了我正在使用的脚本的小提琴。 注意被映射到 observable 的 json 对象。单击加载按钮时,会映射 json 并且属性“test”的值应该显示在标记中。任何想法为什么它没有出现在标签中?

JS fiddle 中有一个工作示例。

http://jsfiddle.net/sLZmQ/

这是被映射的 JSON

 var json = {
"id": 9,
"test": "John Doe",
"firstName": "John",
"lastName": "Doe",
"referenceNumber": "BUY-08",
"position": "Buyer",
"type": "Buyer",
"telephone": "028 82 240780",
"email": "m@email.com",
"departmentId": 3,
"departmentName": "DEPT B",
"country": "United Kingdom"
};

我的示例脚本

var masterModel = function()
{
var self = this;
self.members = ko.observableArray([]);
self.websites = ko.observableArray([]);    
self.seoData = ko.observable();
self.test =  ko.observable();
self.loadWebsite = function(website)
{

var json = {
"id": 9,
"test": "John Doe",
"firstName": "John",
"lastName": "Doe",
"referenceNumber": "BUY-08",
"position": "Buyer",
"type": "Buyer",
"telephone": "028 82 240780",
"email": "m@email.com",
"departmentId": 3,
"departmentName": "DEPT B",
"country": "United Kingdom"
};

              self.test(ko.mapping.fromJS(json))
              console.log(self.test);


}    
}
    var master = new masterModel();

   ko.applyBindings(master);

问题是当你点击 loadWebsite 时,$data.test.test 没有更新!

【问题讨论】:

  • 抱歉,发生了什么事?小提琴是您的示例代码还是其他东西?
  • 小提琴。数据绑定未更新。
  • 何时/如何更新?是什么触发了更新?小提琴看起来正确
  • 当你点击加载按钮时。来自 json 的数据未显示在数据绑定中。
  • 没有显示“加载按钮”。

标签: javascript knockout.js


【解决方案1】:

我更新了,它似乎可以进行一些小的更改:

http://jsfiddle.net/bYQu7/

关键是我取消了对“测试”可观察对象的引用:

<h1 data-bind="text: test().test">?</h1>

而且我还初始化了初始值:

self.test = ko.observable({ test: ko.observable('WTF') });

【讨论】:

  • 非常感谢,我已经尝试了 3 天了!
  • np,顺便说一句,我发现映射插件不值得麻烦,除非您正在做一些非常奇特的事情。
猜你喜欢
  • 2012-03-23
  • 2014-04-12
  • 2015-01-17
  • 1970-01-01
  • 2012-06-08
  • 2012-11-17
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多