Durandal有办法获得当前模块的路径吗?我正在SPA中构建一个仪表板,并希望以与durandal对“FolderWidgetName”相同的方式组织我的小部件,该文件夹将包含controller.js和view.html文件。我尝试在我的controller.js文件中使用getView()方法但是永远不能让它在视图的当前文件夹中查找。
getView(){
return "view"; // looks in the "App" folder
return "./view"; // looks in the "App/durandal" folder
return "/view"; // looks in the root of the website
return "dashboard/widgets/htmlviewer/view" //don't want to hard code the path
}
答案 0 :(得分:1)
您可以使用define(['module'], function(module) { ...
来暂停当前模块。 getView()
将允许您设置特定视图,或者,如下例所示,在多个视图之间动态切换。
define(['module'], function(module) {
var roles = ['default', 'role1', 'role2'];
var role = ko.observable('default');
var modulePath = module.id.substr(0, module.id.lastIndexOf('/') +1);
var getView = ko.computed(function(){
var roleViewMap = {
'default': modulePath + 'index.html',
role1: modulePath + 'role1.html',
role2: modulePath + 'role2.html'
};
this.role = (role() || 'default');
return roleViewMap[this.role];
});
return {
showCodeUrl: true,
roles: roles,
role: role,
getView: getView,
propertyOne: 'This is a databound property from the root context.',
propertyTwo: 'This property demonstrates that binding contexts flow through composed views.',
moduleJSON: ko.toJSON(module)
};
});
这是一个实例http://dfiddle.github.io/dFiddle-1.2/#/view-composition/getView
答案 1 :(得分:0)
在viewmodel中添加激活功能,如下所示:
define([],
function() {
var vm = {
//#region Initialization
activate: activate,
//#endregion
};
return vm;
//#region Internal methods
function activate(context) {
var moduleId = context.routeInfo.moduleId;
var hash = context.routeInfo.hash;
}
//#endregion
});
答案 2 :(得分:0)
您可以简单地将您的设置视图绑定到router.activeRoute.name或.url,这应该可以满足您的需求。如果您在加载时尝试写回setup viewmodels属性,则可以执行以下操作。
如果您正在使用显示模块,则需要定义功能并创建模块定义列表并将其返回。示例:
define(['durandal/plugins/router', 'view models/setup'],
function(router, setup) {
var myObservable = ko.observable();
function activate() {
setup.currentViewName = router.activeRoute.name;
return refreshData();
}
var refreshData = function () {
myDataService.getSomeData(myObservable);
};
var viewModel = {
activate: activate,
deactivate: deactivate,
canDeactivate: canDeactivate
};
return viewModel;
});
您还可以直接揭示文字,可观察信息甚至函数 -
title: ko.observable(true),
desc: "hey!",
canDeactivate: function() { if (title) ? true : false,
查看durandal的路由器页面,了解有关可用内容的更多信息。此外,Durandal 2.0正在开启路由器。