fal*_*l99 8 javascript jquery mvvm knockout.js
我有一个模板:
<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>
Run Code Online (Sandbox Code Playgroud)
还有一些具有一些逻辑的组件:
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)
Run Code Online (Sandbox Code Playgroud)
有没有办法直接传递项目foreach所以我不必这样做?
<ul class="item-list" data-bind="foreach: items">
<item params="title: title,
$element: $element,
$data: $data,
$parent: $parent"></item>
</ul>
Run Code Online (Sandbox Code Playgroud)
但更像是:
<item params="$context"></item>
Run Code Online (Sandbox Code Playgroud)
我是Knockout的新手.我知道我可以传递一个对象视图模型和对象进行操作,所以不是this.title我会做this.object.title或this.$data.title我仍然要经过$element和$parent手动.
有没有其他方法可以自动化这个我错过的方法?
你可以传递$context如下:
<item params="{ context: $context }"></item>
Run Code Online (Sandbox Code Playgroud)
然后在组件代码中:
viewModel: function(params) {
var ctx = params.context;
var itemData = ctx.$data;
$.extend(this, itemData)
},
Run Code Online (Sandbox Code Playgroud)
但是,您似乎根本没有使用上下文,只是this使用传递的item数据进行扩展.所以,以下也会这样做:
<item params="{ item: $data }"></item>
viewModel: function(params) {
$.extend(this, params.item)
},
Run Code Online (Sandbox Code Playgroud)
见小提琴
| 归档时间: |
|
| 查看次数: |
3700 次 |
| 最近记录: |