【问题标题】:Binding knockout doesn't work with Kendo multiSelect绑定敲除不适用于 Kendo multiSelect
【发布时间】:2017-08-17 03:57:49
【问题描述】:

我有一个 multiSelect 元素 HTML:

<li>
        <select id="doc" data-role="multiselect"
            data-placeholder="Choose...'"
            data-value-primitive="true"
            data-value-field="name"
            data-text-field="name"
            data-bind="value: sel, source: list"></select>
        <hr/>
        <span data-bind="text: sel"></span>
    </li>

我只在控制台中看到该值,而不是在跨度中

【问题讨论】:

    标签: javascript html knockout.js kendo-ui


    【解决方案1】:

      function tab() {
        var tabs = "";
    
        for (var i = 0; i < stringify.level; i++) {
          tabs += "\t";
        }
    
        return tabs;
      }
    
    function stringify(items) {
      var item,
        itemString,
        levelString = "";
    
      for (var i = 0; i < items.length; i++) {
        item = items[i];
    
        if (!item.items) {
          itemString = kendo.stringify(item);
        } else {
          stringify.level++;
          var subnodes = stringify(item.items);
          stringify.level--;
    
          delete item.items;
    
          itemString = kendo.stringify(item);
    
          itemString = itemString.substring(0, itemString.length - 1);
    
          itemString += ",\"items\":[\r\n" + subnodes + tab() + "]}";
        }
    
        levelString += tab() + itemString;
    
        if (i != items.length - 1) {
          levelString += ",";
        }
    
        levelString += "\r\n";
      }
    
      return levelString;
    }
    
    stringify.level = 1;
    
    $(document).ready(function() {
      var Node = kendo.data.Node;
      var viewModel = kendo.observable({
        colors: [{
            name: "Red",
            value: "#f00"
          },
          {
            name: "Green",
            value: "#0f0"
          },
          {
            name: "Blue",
            value: "#00f"
          }
        ],
        multiSelectValue: [],
        displayMultiSelectValue: function() {
          var multiSelectValue = this.get("multiSelectValue");
          return kendo.stringify(multiSelectValue);
        }
      });
    
      kendo.bind($("div.demo-section"), viewModel);
    });
    <script src="//kendo.cdn.telerik.com/2017.1.223/js/jquery.min.js"></script>
    <script src="//kendo.cdn.telerik.com/2017.1.223/js/kendo.all.min.js"></script>
    <link href="//kendo.cdn.telerik.com/2017.1.223/styles/kendo.material.mobile.min.css" rel="stylesheet" />
    <link href="//kendo.cdn.telerik.com/2017.1.223/styles/kendo.material.min.css" rel="stylesheet" />
    <link href="//kendo.cdn.telerik.com/2017.1.223/styles/kendo.common-material.min.css" rel="stylesheet" />
    <div id="example">
      <div class="demo-section k-content wide">
        <h4>Current view model state</h4>
        <pre class="prettyprint">
    {
        multiSelectValue: <span data-bind="text: displayMultiSelectValue"></span>
    }
                    </pre>
      </div>
      <div class="demo-section k-content wide">
    
        <ul class="fieldlist">
          <li>
            <h4>MultiSelect:</h4>
            <select data-role="multiselect" multiple="multiple" data-placeholder="choose..." data-value-primitive="true" data-value-field="name" data-text-field="name" data-bind="source: colors, value: multiSelectValue"></select>
          </li>
          <li data-bind="text: multiSelectValue"></li>
          <li>Should be above</li>
        </ul>
      </div>
    </div>

    edited the Kendo demo 更像你的代码,它在跨度中显示[object Object]

        <ul class="fieldlist">
          <li>
            <h4>MultiSelect:</h4>
            <select data-role="multiselect"
             multiple="multiple"
             data-placeholder="choose..."
             data-value-primitive="true"
             data-value-field="name"
             data-text-field="name"
             data-bind="source: colors, value: multiSelectValue"></select>
          </li>
          <li data-bind="text: multiSelectValue"></li>
          <li>Should be above</li>
        </ul>
    

    此问题可能与您的valuetoString 转换有关。

    【讨论】:

    • 正确答案,但我试图不使用该库。我会使用 kendo 的 MVVM 淘汰赛
    • 我已将代码放入此处的 sn-p 中。令我惊讶的是,它运行了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 2014-06-27
    • 2015-08-03
    • 1970-01-01
    相关资源
    最近更新 更多