将params传递给Knockout中的子组件
我有一个模板:
还有一些具有一些逻辑的组件:
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
传递项目,所以我不必这样做?
但更像是:
我是Knockout的新手。 我知道我可以将一个对象传递给视图模型并对该对象进行操作,所以代替this.title
我必须这样做this.object.title
或者this.$data.title
我还是要传递$element
和$parent
手动。
有没有其他方法可以自动化我错过了?
您可以按如下方式传递$context
:
然后在组件代码中:
viewModel: function(params) { var ctx = params.context; var itemData = ctx.$data; $.extend(this, itemData) },
但是,您似乎根本没有使用上下文,只是通过传递的item
数据来扩展this
。 所以,以下也会这样做:
viewModel: function(params) { $.extend(this, params.item) },
见小提琴