我正在测试Kendo UI的单页面应用程序(SPA)和MVVM功能,但我遇到一些问题,将Viewmodel绑定到listview,这是页面的内容...
到目前为止我所拥有的是:
<div id="app">
<button data-bind="click: gotopage1">Page 1</button>
<button data-bind="click: gotopage2">Page 2</button>
<button data-bind="click: gotopage3">Page 3</button>
</div>
<script id="page1" type="text/x-kendo-template">
<ul id="listView1" data-bind="source: photossource"></ul>
</script>
<script id="page2" type="text/x-kendo-template">
//content of page 2
</script>
<script id="page3" type="text/x-kendo-template">
//content of page 3
</script>
<script id="layout" type="text/x-kendo-template">
<header></header><section id=content></section><footer></footer>
</script>
<script type="text/x-kendo-template" id="templatelistitem">
<div class="item">
<img data-bind="attr: { src: this }" />
</div>
</script>
<script>
var set1 = new Array();
var set2 = new Array();
var set3 = new Array();
//fill the arrays... they are just strings to put on the `src` attribute of the `img`
var appViewModel = new kendo.observable({
gotopage1: function () {
router.navigate("/");
},
gotopage2: function () {
router.navigate("/page2");
},
gotopage3: function () {
router.navigate("/page3");
}
});
kendo.bind($("#app"), appViewModel);
var pageViewModel = new kendo.observable({
photossource: set1
});
var page1 = new kendo.View("#page1");
var page2 = new kendo.View("#page2");
var page3 = new kendo.View("#page3");
var layout = new kendo.Layout("#layout");
var router = new kendo.Router();
router.route("/", function () {
pageViewModel.photossource = set1;
layout.showIn("#content", page1);
});
router.route("/page2", function () {
pageViewModel.photossource = set2;
layout.showIn("#content", page2);
});
router.route("/page3", function () {
pageViewModel.photossource = set3;
layout.showIn("#content", page3);
});
$(function () {
router.start();
layout.render($("#app"));
layout.showIn("#content", page1);
});
$(document).ready(function () {
$("#listView1").kendoListView({
template: kendo.template($("#templatelistitem").html())
});
kendo.bind($("#listView1"), pageViewModel);
});
</script>
我需要将pageViewModel
绑定到page1的listview1
。这个pageViewModel
将共享3页。
这给了我以下错误:
未捕获的TypeError:无法读取
中未定义的属性“parent” kendo.web.min.js:12
我的主要问题是:
如何将viewmodel绑定到listview?
我需要设置listview的DataSource吗?
我如何引用列表项模板中的photossource
?
答案 0 :(得分:3)
这是一个JSFiddle解决方案,没有例外,我相信功能正如您所期望的那样。
我改变了很少的东西,我并不是说所有的改变都是必要的,但希望这个例子能引导你走向最终的解决方案。
1)views from template以不同的方式完成。(我做了硬编码。)
var index = new kendo.View('index');
2)MVVM用法的listview应该在以下way
中创建3)如前所述,你应该对你的observables使用model.set(key,value)
pageViewModel.set("photossource", set1)
4)密切关注初始化控件的顺序
答案 1 :(得分:2)
使用Kendo UI View基本上不需要调用kendo.bind。建议的方法是分配ViewModel to the view。之后,您可以在必要时填充其photossource字段。顺便说一句,在视图模型上执行的任何操作都应该通过set和get方法完成。