KnockoutJS json 对象/可观察的“可见”绑定不起作用
Posted
技术标签:
【中文标题】KnockoutJS json 对象/可观察的“可见”绑定不起作用【英文标题】:KnockoutJS json object/observable "visible" binding not working 【发布时间】:2012-07-29 16:13:32 【问题描述】:我正在尝试配置一个相当复杂的模型来将视图绑定到使用 KnockoutJS。
这是一个问题标记部分:
<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
变量确实正在更新。
【问题讨论】:
能否提供更多代码(即 ViewModel 定义) 现在已经很大了。几分钟后我会想出一个小提琴来展示这个问题=) @MaximV.Pavlov 它必须是可观察的,visisble
属性才能在更改时更新。把它放在 JSON 中是行不通的。
我已经更新了问题正文以包含可以展示问题的小提琴。提前感谢您查看它。
@MaximV.Pavlov 这小提琴太疯狂了。我之前的评论不变,它不会更新,因为HasValue
是不可观察的。
【参考方案1】:
我认为您需要为 HasValue 属性创建一个计算值。您的绑定dialogSelectedCode.HasValue
不遵循可观察对象,它会检查可观察对象函数 上的HasValue。属性方式dialogSelectedCode().HasValue
抛出错误。创建一个可计算并让它进行测试works:
self.dialogSelectedCodeHasValue = ko.computed(function()
var selectedCode = ko.utils.unwrapObservable(self.dialogSelectedCode);
return selectedCode && selectedCode.HasValue;
);
【讨论】:
谢谢杰森。我的理解是它会按照我的设置方式工作,因为即使 .HasValue 不是可观察的,dialogSelectedCode
确实是,并且每次选择下拉框项目时整个值实际上都在变化。现在我知道这样不行。以上是关于KnockoutJS json 对象/可观察的“可见”绑定不起作用的主要内容,如果未能解决你的问题,请参考以下文章
KnockoutJS - 可观察对象的可观察数组,包含来自 SQL 服务器的数据
Knockout JS:从 viewmodel 可观察数组创建 Json
将 KnockoutJS 可观察数组传递给 HTTP Post 控制器方法的 AJax 调用失败