【问题标题】:Binding a knockout selects value to a key/value array将敲除选择值绑定到键/值数组
【发布时间】:2015-04-12 13:59:08
【问题描述】:

我在尝试使用剔除绑定到选择时遇到了一些问题。

我尝试绑定的数据看起来像

{
  "SomeProperty": 1,
  "Attributes": [
    {
      "name": "EmailId",
      "value": "1111"
    },
    {
      "name": "Something",
      "value": "223"
    },
    {
      "name": "SomethingElse",
      "value": "19999"
    },
    {
      "name": "IsActive",
      "value": true
    }
  ],
}

我的选择正确绑定到数据源,并且我得到了正确填充的选项

<select class="form-control"
                data-bind="options: $root.types,
                optionsText: 'Key',
                optionsValue: 'Value',
                // value:1111,
                value: $root.helperText($data.Attributes(), 'EmailId'),
                optionsCaption: 'Please Select...'">
        </select>

最后我的助手尝试设置选定的值看起来像

   self.helperText = ko.computed({
                read: function(attributesToSearch, idToSearchBy) {
                    debugger
                    return "";
                },
                write: function(attributesToSearch, idToSearchBy){ 
                    if (attributesToSearch != undefined) {
                        debugger
                        $.grep(attributesToSearch, function(e) {
                            if (e.name() == idToSearchBy) {
                                return e.value();
                            }
                            return null;
                        });
                    }
                }
            });

现在我没有遇到任何问题,代码逻辑似乎可以正常工作,但是没有返回任何值。

我试过了

<span data-bind="value:$root.helperText($data.Attributes(), 'EmailId')"></span>

但是两者都没有返回任何东西,我在这里做错了什么愚蠢的错误吗?

任何帮助都会非常有帮助

【问题讨论】:

  • 您能帮我们解决您的问题吗?我在这里没有得到的一件事是为什么您的值绑定就像下拉菜单一样,您不能简单地捕获选定的值,即value:$data.someobservable
  • 你不能像这样使用computedread 函数应该是一个没有参数的函数,write 函数应该是一个只有一个参数(新值)的函数。查看this part of the docs
  • 无论如何,为了能够帮助你,我必须第二个@supercool:我们需要一个repro,或者至少是你的视图模型的代码。最好创建一个 Stack Snippet(它在编辑器工具栏上)来重现您的场景。

标签: knockout.js


【解决方案1】:
  • 您将value 绑定到&lt;span&gt; 元素,而它仅适用于表单元素。
  • computed 不是您可以使用任何您希望的参数执行的函数。它与构造函数/对象中定义的一个或多个其他可观察对象绑定
  • 对于writable computedread 函数返回绑定的显示输出,而您的read 函数返回'',所以当然,你看不到价值。
    write 函数是可以传递1 参数value 的函数,通常绑定到表单元素,这将改变计算绑定的原始可观察对象到。

例如,不久前,我想知道 &lt;textarea&gt; 如何用于输入选项列表(每个新行都是一个选项),进行验证,并且不为视图创建单独的可观察对象。这是在组件中使用可写计算的一个很好的示例:

http://jsfiddle.net/kevinvanlierde/8ht5zg2c/1/

【讨论】:

    猜你喜欢
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2015-07-18
    • 2012-06-25
    • 2011-12-12
    • 1970-01-01
    相关资源
    最近更新 更多