【发布时间】:2012-08-03 13:56:37
【问题描述】:
我被困在项目的一个特定部分,该部分由标题中提到的组件组成。
我目前有一个按我希望的方式工作的概念证明:
- Sammy 已集成到淘汰视图模型中(根据教程 在淘汰赛网站上)
- 视图由控制器按需加载 (所以我不必在应用程序页面上定义每个视图)
在我目前的情况下,我在应用程序启动时实例化视图模型(如果我不实例化它们,Sammy 将不会处理路由)。问题是 Sammy 加载和交换视图的位置。我必须调用 ko.applyBindings 才能让 KO 绑定到视图。但是反复调用 applybingings 是不好的做法。
我的问题是,如何绑定到按需加载的视图?我不能调用 ko.applybindings,因为当视图被多次加载时会造成内存泄漏。
这是一个带有违规 ko.applyBindings 的示例 VM:
function serviceInfoVm() {
var self = this;
self.ObjectKey = ko.observable();
self.Service = ko.observable();
self.LoadService = function () {
$.get('ServiceData/Detail', { serviceId: self.ObjectKey() }, function (data) {
self.Service(data);
});
};
$.sammy('#content', function () {
this.get('#/service/:id', function (context) {
var ctx = context;
self.ObjectKey(this.params['id']);
self.LoadService();
$.get('Content/ServiceInfo', function (view) {
ctx.app.swap(view);
ko.applyBindings(self);
});
});
}).run();
};
有人对此问题有一些指示和/或解决方案吗?
【问题讨论】:
-
您是否有理由要使用 sammy swap 而不是淘汰模板?查看 html 文件插件 github.com/ifandelse/Knockout.js-External-Template-Engine 中的外部模板,它应该可以满足您的要求(如果我理解正确的话)
-
我想动态加载视图..但现在放弃了这个想法。在下面查看我自己的答案
标签: asp.net-mvc asp.net-mvc-3 knockout.js sammy.js