【问题标题】:Knockout fallback view淘汰赛后备视图
【发布时间】:2017-08-26 16:23:38
【问题描述】:
Durandal、RequireJS、KnockoutJS
我的项目中有一个通用视图和一个特定于客户的视图。
│ faq.html
│ welcome.html
│ shell.html
│
├───Client1
│ faq.html
│
├───Client2
│ faq.html
│ welcome.html
如果存在,我想显示客户端特定视图,否则显示默认视图。
类似的东西。
<div>
<div data-bind="compose: { view:'views/Client1/faq.html', fallbackView: 'view/faq.html' }"></div>
</div>
【问题讨论】:
标签:
javascript
knockout.js
requirejs
durandal-2.0
knockout-mvc
【解决方案1】:
我认为你最好在你的视图模型中处理这个而不是在你的视图中。 Durandal 允许您对其 compose 绑定使用可观察属性,因此您可以执行以下操作:
<div>
<div data-bind="compose: { view: currentView }"></div>
</div>
...
viewModel = function(){
var self = this;
self.currentView = ko.observable();
self.loadView = require(['text!views/Client1/faq.html', 'text!view/faq.html'], function(clientView, defaultView) {
if(clientView) {
self.currentView('views/Client1/faq.html');
} else {
self.currentView('view/faq.html');
}
});
}
当然,尝试加载视图路径两次似乎有点多余,但如果您没有任何其他方法可以知道视图是否存在,那么它可能是您最好的选择。