【问题标题】:dropdown knockoutjs with value from server具有来自服务器的值的下拉敲除js
【发布时间】:2013-03-21 13:41:00
【问题描述】:

我正在处理 TR 中的下拉菜单。我有 true、false 或 none 作为我从服务器收到的值,我希望它更改下拉选项,如下例所示。

第一个正在工作,但我希望第二个充当第一个

Example is here: http://jsfiddle.net/3xLgJ/

这是我的 HTML:

       <div data-bind='text: incomingValue'></div>

       <select data-bind="value: incomingValue">
             <option value="true">Yes</option>
             <option value="false">No</option>
             <option value="none">Don't Know</option>
      </select>

我怎样才能像上面那样实现它,因为它在一个 tr 内并像上面一样起作用

      <select  data-bind='options: yesno, value: incomingValue'/>

这是我的淘汰赛

    var myModelView = function () {
    self = this;
    self.yesno = ko.observableArray(['Yes', 'No', 'Don\'t know']);
    self.incomingValue = ko.observable('none');
    };

    var moView = new myModelView();

    ko.applyBindings(moView);  

谢谢

谢谢

【问题讨论】:

    标签: javascript knockout.js knockout-mapping-plugin knockout-2.0 knockout-mvc


    【解决方案1】:

    最好的解决方案可能是稍微重构视图模型以使用对象而不是简单的字符串:

    // Create a "class" that represents an option
    var Option = function(id, caption) {
        this.id = id;
        this.caption = caption;
    };
    

    现在你用这个函数构造的对象填充 observable 数组:

    self.yesno = ko.observableArray([
        new Option('true', 'Yes'),
        new Option('false', 'No'),
        new Option('none', 'Don\'t know')
    ]);
    

    您可以使用“optionsText”绑定将这些对象正确绑定到标记:

    <select data-bind="options: yesno,
                       optionsText: 'caption',
                       value: selectedItem"></select>
    

    如果你从服务器收到一个字符串“none”,你需要找到代表这个选项的对象:

    var incomingValue = 'none';
    
    // Find the first object that is a match in the observable array "yesno"
    var incomingItem = ko.utils.arrayFirst(self.yesno(), function(item) {
        return item.id == incomingValue;
    });
    
    self.selectedItem = ko.observable(incomingItem);
    

    在其他地方显示选择时,您需要考虑选择是由一个对象表示的:

    <div data-bind='text: selectedItem().caption'></div>
    

    演示:http://jsfiddle.net/3xLgJ/2/

    【讨论】:

      【解决方案2】:

      您需要使用optionsTextoptionsValue 绑定。您需要创建一个可观察的值和文本数组:

      self.yesno = ko.observableArray([
          {value:"true",text:"Yes"},
          {value:"false",text:"No"},
          {value:"none",text:"Don't Know"}]);
      

      那么,你需要在你的 html 中做这样的事情:

      <select data-bind="options: yesno2, optionsText: 'text',optionsValue: 'value', value: incomingValue"></select>
      

      有关工作示例,请参阅 here

      【讨论】:

      • 很好的答案蒂姆,如果我在这里有像 inVal 这样的服务器的值,还有一个:jsfiddle.net/DQwwm
      • 您可以在每次收到来自服务器的更新数据时更新self.incomingValue() 中的值。也许像self.incomingValue(self.inValue[0].incomingValue.toString());
      猜你喜欢
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 2014-04-14
      • 2017-11-07
      • 2015-08-17
      • 2012-01-09
      相关资源
      最近更新 更多