挖空模板和绑定到视图模型
Knockout templates and binding to view models
我在尝试让淘汰模板工作时遇到了一些麻烦。
我想使用一个选择列表,该列表允许一个人选择一个值,该值又显示模板。
模板需要有自己的视图模型属性,每个属性之间都不同。
我创建了一个jsfiddle来显示整个事情
我有 2 个非常基本的模板,但是当我尝试运行页面时出现错误。代码不是生产代码,它只是扔掉的东西,所以命名约定并不完美:)
错误:无法处理绑定"foreach:函数 (){返回联系人 }" 消息:无法处理绑定"模板:函数 (){返回 { 名称:联系人类型ID} }" 消息:未知模板类型:1
模板确实存在
<script type="text/html" id="1">
<span> Family Template </span>
<input placeholder="From Mum or Dads side"/>
</script>
<script type="text/html" id="2">
<span> Friend Template </span>
<input placeholder="Where did you meet your friend"/>
</script>
我正在尝试通过选择
<select class="form-control" data-bind="options: $root.contactTypes,
optionsText: 'type',
optionsValue:'id',
value:contactTypeId,
optionsCaption: 'Please Select...'"></select>
2个问题。
- 为什么当我从下拉列表中选择模板时找不到模板?
- 我将如何绑定模板以拥有自己的模型以允许我保存属性。
更新
感谢下面的乔治回答,我有模板绑定工作。事实证明,如果不调用
我已经更新了我的模型
self.contactTypeTemplateModel = ko.computed(function () {
return self.contactTypeId === 2 ? someModelWithWhereDidYouMeet : someOtherModel
});
var someModelWithWhereDidYouMeet = {something:ko.observable()};
var someOtherModel = {something:ko.observable()};
这可能是由于没有睡眠,但我无法让它工作。控制台告诉我"有些东西没有定义"
当然,我的命名不好。我还更新了小提琴
问题 #1 的问题似乎是您传入了一个需要字符串的数字。无论出于何种原因,它都不会被自动胁迫。这就解决了。
template: { name: contactTypeId().toString() }
更好的是,创建一个计算并添加一个合理的前缀。
templateName = ko.computed(function() { return "contact-type-" + contactTypeId() })
至于传递不同的模型。template
绑定支持 data
属性。您的数据属性也可以是基于contactTypeId
计算的。
所以你做你的模板绑定 template: {name: contactTypeTemplateName(), data: contactTypeTemplateModel() }
哪里
self.contactTypeTemplateModel = ko.computed(function() {
return self.contactTypeId() === 2 ? someModelWithWhereDidYouMeet
: someOtherModel })
我还应该提到,除非您在很多地方彼此独立地重复使用这些模板,否则我不会为此推荐模板。我只会使用if
绑定。
相关文章:
- 如何在视图模型contet更新更新上调用Jquery函数
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 在MVVM视图模型中处理应用程序范围的元素
- 将c#视图模型转换为javascript模型时转义HTML标记
- 使用knockout.js将数组绑定到视图模型
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- 聚合物:在不同的视图模型中多次使用元素
- 使用AMD时未定义淘汰组件视图模型
- 如何在Knockout.js中选中复选框时更新视图模型及其依赖项
- 无法将对象列表从视图模型设置为 javascript 变量
- 挖空视图模型函数仅影响最后一个实例
- 挖空.js嵌套视图模型不起作用
- 为什么我的视图模型不起作用
- 挖空、视图模型位于其他对象和数据绑定中
- 如何将经度/经度值绑定到挖空视图模型方法
- 挖空.js:等待视图模型实例化完成
- 在Knockout视图模型中调用jQuery插件是一种有效的模式
- KnockoutJS:如何避免在applyBindings上运行视图模型函数
- 使用knockoutjs操作视图模型
- Kendo UI自定义验证不适用于模板和视图模型