【问题标题】:KO databind to array without foreach?KO数据绑定到没有foreach的数组?
【发布时间】:2013-01-31 21:47:16
【问题描述】:

我正在使用 MVC + Razor,并希望尽可能留在强类型世界中。

因此希望使用 Razor 语法遍历我的视图模型,并通过数组索引将数据绑定到剔除。

这可行吗?到目前为止,我看到的所有示例都排除了使用 for-each 模板的可能性。

@Html.TextBoxFor(_ => _[i],new {@readonly = "readonly", data_bind = string.Format("value:[{0}]",i) });

其中强类型模型是一个数组,上面是从 for 循环内部迭代的。

【问题讨论】:

  • for-each 位于 collection 之上(即数组,可能为空),但每个 [nested] 数据绑定到项目属性,因此每个 "相同”文本框(对于每个项目)应绑定到相同的属性名称。否则,你失去了我。
  • @pst 是正确的。此外,您需要先使用这些属性设置您的 Knockout 视图模型,然后才能绑定到它们。
  • @Ek0nomik 似乎最新的 ko/ko.mapping 绑定到不存在的属性(它为它们创建了一个 observable),所以它只是需要存在的结构(即对象层次结构).. It Works Here (TM),我们将它用于 WS/XML 驱动的模型。文档中的 YMMV 似乎另有说明。
  • 我想避免在客户端做 for-each。我只想打印整个html并绑定KO成员。这在没有 ko-foreach 的情况下可行吗?
  • 当然你可以绑定到一个没有foreach的数组。 jsfiddle.net/8pVEr 如果它不起作用,那么您的绑定语法可能是错误的。但是如果没有看到您的视图和 ko 视图模型的外观,很难提供帮助......

标签: javascript asp.net-mvc razor asp.net-mvc-4 knockout.js


【解决方案1】:

感谢@nemesv 的原始jsfiddle:

<input type="text" data-bind="value: $data[0].name"></input>
<input type="text" data-bind="value: $data[1].name"></input>
<input type="text" data-bind="value: $data[2].name"></input>

使用以下 javascript 文件。

var ViewModel = ko.observableArray( [{
        name: 'name1'
    }, {
        name: 'name2'
    }, {
        name: 'name3'
    }]
);

ko.applyBindings(ViewModel);

$data 没有它是必需的,它不起作用。我仍然不确定这是为什么。

http://jsfiddle.net/8pVEr/3/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-22
    • 2015-07-22
    • 2014-03-31
    • 2012-09-18
    • 2014-02-11
    • 2012-04-11
    • 2012-04-27
    • 1970-01-01
    相关资源
    最近更新 更多