knockout js:模板化绑定中的参数

时间:2011-12-14 10:01:50

标签: javascript knockout.js jquery-templates

我试图模拟我项目中经常使用的一些组件。省略html内容中引入的冗余。但是如果有可能的话,我也没弄明白。

我有一个模板:

<script type="text/x-jquery-tmpl" id="somefieldtemplate" >  
<input  name=" Prefix" type="text" data-bind="value: ${ $item.fieldName}SomeField" /> 
   ..... mor contents ... 
</script>

绑定到输入组件的参数应该是可调整的,因为有人可以通过模板选项看到,所以我有一个像

这样的条目
<div data-bind="template: { name: 'somefieldtemplate', 
         templateOptions: 
             { fieldName:'somefield', displayName:'somefieldlabel' } }">

我的控制台日志中的错误消息是:

SyntaxError: Unexpected token {

我将问题缩小到这样一个事实:如果我删除$item.fieldName及其值,它就会起作用。

有没有人能够解决这个问题呢?

编辑:

正如我目前在版本中使用knockout.js的信息:knockout-latest

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,在经历了很多努力之后,我通过移动到淘汰1.3 beta(现在它在RC中)解决了它,它不使用外部模板引擎。它也不支持templateOptions,但这不是问题。我刚刚为模板构建了一个自定义数据,其中包含作为属性的主数据以及包含我将在1.2中的templateOptions中传递的内容的其他属性。我在data参数中传递了它,一切正常。

答案 1 :(得分:0)

尝试

data-bind="value: ${fieldName} + 'SomeField'"

答案 2 :(得分:0)

可悲的是,我需要自己回答。但我设法让它工作。感谢RP Niemeyer的提示。

对于对此感兴趣的每个人:

使用寄存器组件方法在模型someModel中动态生成Observable。这个可观察对象的名称总是<field>SomeField

模板:

<script type="text/x-jquery-tmpl" id="somefieldtemplate" >  
<input  name="${$item.fieldName}Prefix" type="text" data-bind="value: someModel[$item.fieldName + 'SomeField']" /> 
   ..... more contents ... 
</script>

模板的结合:

<div data-bind="template: { name: 'somefieldtemplate', 
         templateOptions: 
             { fieldName:'somefield', displayName:'somefieldlabel' } }">