Javascript 在foreach中为组件参数使用$data进行敲除
我开始使用组件,但我正在努力使用这个简单的代码 当我在函数Javascript 在foreach中为组件参数使用$data进行敲除,javascript,knockout.js,Javascript,Knockout.js,我开始使用组件,但我正在努力使用这个简单的代码 当我在函数viewModel(params)中放置断点时,对象params.data是我的视图模型viewModelHelloWorld,而我希望它是数组的一项。我做错了什么 Html: 好吧,我有点被这个难住了。我试过你的例子,得到了同样的结果。因此,解析自定义元素和解析数据绑定肯定有些不同 但是有一个解决办法。如果使用,则$data变量将按预期工作。e、 g <table data-bind="foreach: arrays">
viewModel(params)
中放置断点时,对象params.data
是我的视图模型viewModelHelloWorld
,而我希望它是数组的一项。我做错了什么
Html:
好吧,我有点被这个难住了。我试过你的例子,得到了同样的结果。因此,解析自定义元素和解析数据绑定肯定有些不同 但是有一个解决办法。如果使用,则
$data
变量将按预期工作。e、 g
<table data-bind="foreach: arrays">
<!-- ko component: { name: 'test-component', params: {data: $data} } -->
<!-- /ko -->
</table>
我感觉foreach中的隐式模板在应用foreach之前就被解析了,因此它是在主视图模型上下文ergo viewModel===$data中被解析的,而不是在foreach循环中被解析的。但这只是一个理论。我不知道您在
元素中使用了自定义标记。显然,浏览器正在将其推出,因为它不是有效的子项。浏览器正在有效地执行以下操作:
<test-component params="data: $data"></test-component>
<table data-bind="foreach: arrays">
</table>
您仍然可以为组件中的每一行添加更多列。或者更好的方法是,将整个表作为一个组件,并以这种方式构建视图。这是最有意义的
我们以前遇到过类似的情况。我同意。我注意到绑定是在foreach绑定的上下文更改生效之前应用的。我认为问题在于“ControlDegenantBindings”标志不适用于自定义元素。“foreach”绑定将“ControlDegenantBindings”设置为true,以阻止knockout将绑定应用于内部HTML。但这似乎并不影响自定义元素解析。啊,我知道它是什么。这是我以前说过的。简而言之,浏览器正在尝试做正确的事情,并将自定义元素从表中推出,因为它不是有效的元素。
<table data-bind="foreach: arrays">
<!-- ko component: { name: 'test-component', params: {data: $data} } -->
<!-- /ko -->
</table>
<test-component params="data: $data"></test-component>
<table data-bind="foreach: arrays">
</table>
<table data-bind="foreach: arrays">
<tr data-bind="component: { name: 'test-component', params: $data }"></tr>
</table>
<script type="text/html" id="line-items">
<td data-bind="text: Key"></td>
</script>
ko.components.register('test-component', {
template: { element: 'line-items' },
viewModel: function viewModel(params) {
this.Key = ko.observable(params.Key);
}
});