淘汰foreach和模板中的组件
Knockout components within foreach and templates
因此,随着组件和自定义元素的引入,封装逻辑和标记似乎要容易得多,但当您需要传入视图模型时,我有点不确定如何使用foreach部分中的组件。
所以我目前的场景是,我有一个视图模型,看起来像:
function SomePartialViewModel()
{
this.Name = ko.observable();
this.Score = ko.observable();
this.SomeDate = ko.observable();
}
function SomeViewModel()
{
this.DataFromWebServiceCall = ko.observableArray();
this.GetDataFromServer = function(){
// get some data from service and populate DataFromWebSeriviceCall with instances of SomePartialViewModel
}
}
现在,在上面的文章中,我们有一个POJO来包含部分数据,并且我们为视图提供了一个主视图模型,它将联系web服务或其他东西,并用部分的实例填充其数组。然后这将是目前这样使用:
<div id="partial-data" data-bind="template: { name: 'partial-view', foreach: DataFromWebServiceCall }"></div>
<div class="partial-view">
<label data-bind="text: Name"></label>
<label data-bind="text: Score"></label>
<label data-bind="text: SomeDate"></label>
</div>
现在假设.partial-view
在一个具有正确模板名称等的脚本标记中,并且是一个正确的模板,那么#partial-data
在主视图中,并且希望在页面上显示所有实例。现在一切都正常了,但我想转向一个更基于组件的模型,目前我们可以看到模板依赖于SomePartialViewModel数据,所以我们有了该组件的模板和视图模型,但问题是将视图模型放入组件,因为目前您在安装时注册了该组件,然后你可以使用params来填充它的块。然而,在这种情况下,我想在绑定时将视图模型传递给组件。。。
所以我想知道我该怎么做,因为我想我可以用模板注册组件,但没有视图模型,但有data
样式绑定的概念吗?我可以在其中设置$data
属性,并从视图上的模板绑定移动到foreach?
希望我试图解决的问题能被看到,任何信息都会很棒。
有很多方法可以使用params
将值和/或视图模型传递给组件。
如果您使用createViewModel
方法,您可以通过params传入视图模型,并使用部分视图模型作为组件视图模型:
ko.components.register("partial-view", {
viewModel: {
createViewModel: function (params) {
return params.value;
}
},
template: "<div>Partial View for <b data-bind='text: Name'></b></div>"
});
你可以在这个小提琴中看到一个工作示例:http://jsfiddle.net/Quango/fn1ymf9w/
您可以在viewModels下定义viewModels:)
就像定义一个可观察对象一样,您可以定义另一个viewModel,并使用"with"绑定可以创建您想要的基于组件的模型。
首先,您分别创建组件、子组件和子子组件等视图模型。
var SomePartialViewModel = function()
{
this.Name = ko.observable();
this.Score = ko.observable();
this.SomeDate = ko.observable();
}
var SomeViewModel = function()
{
this.DataFromWebServiceCall = ko.observableArray();
this.GetDataFromServer = function(){
// get some data from service and populate DataFromWebSeriviceCall with instances of SomePartialViewModel
}
this.SPM = new SomePartialViewModel(); // partial-1
}
然后创建一个MainViewModel并在此处绑定所有主要元素。
var MainViewModel = function() {
var self = this;
self.SVM = new SomeViewModel();
self.SPM = new SomePartialViewModel(); // partial-2
}
ko.applyBindings(new MainViewModel());
然后在你的html中,你可以按照你在敲除实体上创建的上下文创建你的组件
...
<body>
<div data-bind="with: SVM">
....
<div data-bind="with: SPM">
<!-- partial-1 data -->
</div>
...
</div>
<div data-bind="with: SPM">
<!-- partial-2 data -->
</div>
</body>
...
您可能需要为组件模型创建单独的文件,并使用模块化脚本加载程序(如Require-js)将所有文件绑定到一个完整的基于组件的淘汰web应用程序
- React重新渲染但未显示正确的组件
- 不能从angular2中的子组件指定父组件中的数组
- 拨打'父亲'函数形式a'儿童'ReactJS中的组件
- React组件等待所需道具进行渲染
- 如何创建带有插槽的vue js组件预加载程序
- Foreach无法在Typescript中工作
- KnockoutJS-组件-多个实例
- $rootScope未使用forEach进行更新
- 如何制作简单的php'在Javascript中的foreach等价物
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何在react js中将值从一个组件发送到另一个组件
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- React组件-设置页面标题
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- 如何在salesforce aura闪电组件中使用jQuery.val()
- 在foreach中加载所有项后,Knockoutjs组件回调
- 如何在 foreach 循环中使用 JavaScript 变量之前从 JavaScript 变量中删除或排除组件
- 在 foreach 中使用 $data for 组件参数进行挖空
- 淘汰foreach和模板中的组件
- 如何访问foreach中Knockout组件中的数组成员