0

我有一个可观察到的淘汰赛映射到 javascript 中的一个选择。根据选择值,它有一个 div 的“with”绑定。

我需要在 javascript 中设置 observable 的值,问题是 div 永远不会出现。以下是详细信息:

observable 绑定到 UI 中的一个 select,并且选中的值是一个对象:

 <select data-bind="options: Offers, 
                    optionsText: 'Offer', 
                    optionsCaption: 'Please Choose', 
                    value: SelectedOffer">
 </select>

当用户选择一个值时,我有一个使用“with”绑定的 div 数据,该数据显示在选择下方:

<div data-bind="with: SelectedOffer">
     ....
</div>

现在,当我在 UI 中选择一个值时,它工作得非常好。

当用户选中一个框时,我在 javascript 中设置可观察值,这也有效:

event.SelectedOffer(myOffer);

我可以看到我在选择中设置的报价。问题是使用“with”绑定的 div 永远不会出现。如果我从选择中手动选择某些东西,那么它会再次正常工作。

我尝试了许多不同的方法,以某种方式让 ko 知道值已更改,并且它需要向我显示 div,但似乎没有任何效果。我用过

valueHasMutated
valueWillMutate
ko.utils.triggerEvent
$(myselect).change()

帮助!

4

2 回答 2

0

听起来你把一些事情和 KO 混淆了

您的value:select 元素上的 将自动在您的 ViewModel 上设置 SelectedOffer observable。无需手动设置它,我理解您认为您正在使用它 event.SelectedOffer(myOffer);

如果您只想在用户检查某些内容时更新 SelectedOffer,则需要将选择框上的值绑定到不同的 observable,然后手动更新您的“真实”值

我已经设置了 http://jsfiddle.net/HLGKf/来演示如何设置一个简单的 ViewModel 和选择框,以及使用 with: 绑定

于 2013-06-11T17:19:17.857 回答
0

好的,这已经解决了!!!感谢您的回复,尤其是 nemesv 的评论和设置 jsfiddle。

http://jsfiddle.net/ww9dK/14/

var ViewModel = function()  {
var self = this;
   self.list1 = [{Offer: "Offer1"},{Offer: "Offer2"},{Offer: "Offer3"}];
   self.list2 = [{Offer: "Offer4"},{Offer: "Offer5"},{Offer: "Offer6"}];

   self.AlternateList = ko.observable(false);
   self.SelectedOffer = ko.observable();
   self.SelectedList = ko.observable(self.list1);

   self.selectSecond = function() {

     self.SelectedList(!self.AlternateList() ? self.list2: self.list1);
     self.SelectedOffer(!self.AlternateList() ? self.list2[0]: self.list1[0]);
   }
};

底线是我的备用列表需要是可观察的。感谢一位很棒的同事的帮助,解决了。ko.applyBindings(new ViewModel());

于 2013-06-11T19:03:40.823 回答