【发布时间】:2016-02-03 11:52:48
【问题描述】:
我认为,knockoutjs writables 计算 observables 存在一些问题。
我创建了一个fiddle。
我需要的其实没那么难:
我有可空的 WeightInGramms 和 VolumeInMilliliters 值。
这些值应该绑定到两个输入字段(其中只有一个应该是可见的)。
在顶部,用户可以选择他想与单选按钮一起使用的这些值中的哪一个。
在初始化时,当它们都为空时,应选中“g”单选按钮,当WeightInGramms 不为空时也是如此。当VolumeInMilliliters 有一些值时,应该选中“ml”单选按钮。
我为此使用了 knockoutjs 可写计算可观察,如果有更好的方法,请纠正我!
所以,当我更改绑定到WeightInGramms 或VolumeInMilliliters 的输入值时,读取功能似乎起作用了。但是当我更改单选按钮时,什么也没有发生......
var ViewModel = function (data) {
var self = this;
this.VolumeInMilliliters = ko.observable(data.VolumeInMilliliters);
this.WeightInGramms = ko.observable(data.WeightInGramms);
this.GrammIsSelected = ko.computed({
read: function() {
return (!self.WeightInGramms() && !self.VolumeInMilliliters()) || !self.VolumeInMilliliters();
},
write: function (newValue) {
console.log(newValue);
return newValue;
},
owner: this
});
};
当我更改单选按钮时,相应的输入字段应该是可见的:
<div data-bind="visible: GrammIsSelected">g is active</div>
<div data-bind="visible: !GrammIsSelected()">ml is active</div>
编辑:
第一次加载表单时,两个值都将为空 -> 应选中“g”按钮。
observables 可以通过以下方式初始化:
null, null
33, null
null, 33
两者都可以为空,但其中只有一个可以有值。 如果用户键入一个值,然后单击另一个单选,则该值可以应用于另一个值。
我希望它更清楚一点
【问题讨论】:
-
你真的想做什么伙计?你的代码和你的问题真的不清楚......这次避免技术细节,只是简单的英语,你的用户界面应该做什么?
-
好的@AdrianSalazar,我更新了小提琴和问题。也许它更清楚一点......:-/
-
好吧...好多了...小菜一碟!
-
请清楚地描述行为:第一次加载表单时会发生什么? observables 是如何初始化的?如果用户写入一个值然后单击另一个收音机会发生什么?如果用户再次键入另一个收音机并在双方都键入值会发生什么?您需要以一种非常不同的方式来面对这个问题:获取一个单位的值,仅此而已,一切都会更加清晰