2014-09-02 68 views
0

我试图绑定列表中的数组,但列表需要在数组的值之前有一个静态元素。Kendo mvvm模板与源无父元素

小提琴显示我想要的结果,除了它目前嵌套li项目。

HTML:

<ul id="root"> 
    <li>blop</li> 
    <li data-template="list-template" data-bind="source: products"> 
    </li> 
    <script id="list-template" type="text/x-kendo-template"> 
     <li data-bind="text: name"></li> 
    </script> 
</ul> 

的JavaScript:

var vm = kendo.observable({ 
    products: [ 
     { id: 1, name: "foo" }, 
     { id: 2, name: "bar" } 
    ] 
}); 

kendo.bind($("#root"), vm); 

http://jsfiddle.net/zpqo80pw/

随着KnockoutJS,有可能被使用的注释语法:

<!-- ko: foreach: products --> 
<!-- /ko --> 

在Kendo UI中有类似的东西吗?

回答

1

我认为你应该可以通过扩展kendo绑定来实现这一点。我在jsfiddle上举了一个小例子,看它是否符合你的要求。

kendo.data.binders.staticValue = kendo.data.Binder.extend({ 
     refresh: function() { 
       debugger; 
       var that = this; 
       var value = that.bindings["staticValue"].get(); 
       $(that.element).text(value + $(that.element).text()); 
      } 
     }); 
+0

我喜欢你暗示的东西,但JSFiddle和我一样。也许你忘了保存?当我回到那段代码时,我会考虑做类似的事情! – 2014-09-03 12:00:06

+0

对不起。我没有更新jsfiddle。这里是更新的一个http://jsfiddle.net/5g7ubm1s/2/ – user3731783 2014-09-03 16:17:05

+0

是不是我想要的,但你让我一个体面的解决方案。 http://jsfiddle.net/5g7ubm1s/4/这预先应用了模板应用后我想要的任何HTML。谢谢! – 2014-09-04 00:37:01

0

这是一个老问题了,我知道,但如果这个人想这样做严格MVVM,所有他们需要的是调用同样的数据绑定和数据模板,但把它放在一个容器元素,例如作为

<ul data-template="template-id" data-bind="source: items"></ul> 

,并在模板简单地改变

<script id="list-template" type="text/x-kendo-template"> 
    <li data-bind="text: name"></li> 
</script> 

<script id="list-template" type="text/x-kendo-template"> 
    <li>#: staticValue # :: #: name #</li> 
</script> 

任何在模型中传递给模板的东西都可以使用,甚至可以在模板#旁边混合使用数据注入:#语法