2012-07-31 110 views
2

我想配置一个相当复杂的模型来绑定视图来使用KnockoutJS。KnockoutJS json对象/可观察的“可见”绑定不起作用

这是一个问题的标记部分:

<input type="text" data-bind="visible: dialogSelectedCode.HasValue, value: dialogSelectedCodeValue"/> 
<span data-bind="text: ko.toJSON(dialogSelectedCode)"></span> 

输入要素从未显示,但我的“调试”跨度显示的内容

{"Code":"{intInc_G}","HasValue":true} 

什么是绑定一个可见的正确方法我的输入情况下,“决定” - 数据隐藏在JSON对象内?

更新:这是一个相当复杂的fiddle of the problem。要进入问题对话框,请运行小提琴,单击“添加块”,然后尝试在下拉输入中选择多个项目(尤其是第一个和第二个项目) - 因为它们清楚地表明dialogSelectedCode变量确实正在更新。

+0

你能否提供一些鳕鱼e(即ViewModel定义) – mreyeros 2012-07-31 19:58:39

+0

现在是巨大的。我会在几分钟内找出一个小提示来展示这个问题=) – 2012-07-31 20:00:56

+0

@ MaximV.Pavlov当visisble属性发生变化时,它需要被观察。把它放在JSON中将不起作用。 – Tyrsius 2012-07-31 20:02:40

回答

2

我认为你需要为HasValue属性创建一个计算结果,你的绑定dialogSelectedCode.HasValue没有遵循observable,它会在可观察的函数上检查HasValue属性的方法dialogSelectedCode().HasValue会抛出一个错误。创建一个可计算并让它执行测试works

self.dialogSelectedCodeHasValue = ko.computed(function() { 
    var selectedCode = ko.utils.unwrapObservable(self.dialogSelectedCode); 
    return selectedCode && selectedCode.HasValue; 
}); 
+0

谢谢杰森。我的理解是,它可以按我设置的方式工作,因为即使.HasValue不是可观察的,dialogSelectedCode确实是,而且每次选择drop box项目时,整个值都会发生变化。现在我知道它不能这样工作。 – 2012-08-01 03:07:31