gpt4 book ai didi

javascript - 将参数传递给 Knockout 中的子组件

转载 作者:数据小太阳 更新时间:2023-10-29 04:13:31 26 4
gpt4 key购买 nike

我有一个模板:

<template id="item-list">
<form action="" data-bind="submit: addItem">
<input type="text" name="addItem" data-bind="value: newItem">
<button type="submit">Add Item</button>
</form>
<ul class="item-list" data-bind="foreach: items">
<item params="title: title,
$element: $element,
$data: $data,
$parent: $parent"></item>
</ul>
</template>
<template id="item">
<li class="item" data-bind="text: title, click: $parent.removeItem"></li>
</template>
<item-list params="items: items"></item-list>

还有一些具有一定逻辑的组件:

function Item(title) {
this.title = title
}

ko.components.register('item-list', {
viewModel: function(params) {
this.items = ko.observableArray(params.items)
this.newItem = ko.observable('')
this.addItem = function() {
this.items.push(new Item(this.newItem()))
}
this.removeItem = function(a) {
this.items.remove(a.$data)
}.bind(this)
},
template: {element: 'item-list'}
})

ko.components.register('item', {
viewModel: function(params) {
$.extend(this, params)
},
template: {element: 'item'}
})

function ViewModel() {
this.items = [
new Item('One'),
new Item('Two'),
new Item('Three')
]
}

var vm = new ViewModel()

ko.applyBindings(vm, document.body)

有没有办法直接在 foreach 中传递项目,这样我就不必这样做了?

<ul class="item-list" data-bind="foreach: items">
<item params="title: title,
$element: $element,
$data: $data,
$parent: $parent"></item>
</ul>

而是像这样的东西:

<item params="$context"></item>

我是 Knockout 的新手。我知道我可以将一个对象传递给 View 模型并对该对象进行操作,因此我必须执行 this.object.title 而不是 this.titlethis.$data.title 我仍然需要手动传递 $element$parent

有没有其他方法可以自动化我所缺少的?

最佳答案

您可以按如下方式传递 $context:

<item params="{ context: $context }"></item>

然后在组件代码中:

viewModel: function(params) {
var ctx = params.context;
var itemData = ctx.$data;
$.extend(this, itemData)
},

但是,您似乎根本没有使用上下文,您只是使用传递的 item 数据扩展了 this。因此,以下内容也可以:

<item params="{ item: $data }"></item>

viewModel: function(params) {
$.extend(this, params.item)
},

参见 Fiddle

关于javascript - 将参数传递给 Knockout 中的子组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31351843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com