我正在将 marionette 用于一个有很多页面的应用程序。 Controller /路由器方法是重复的,在每个方法中都会实例化 View ,并且 appRegion 显示 View 。
我想在循环内创建方法。
var Controller = Marionette.Controller.extend({});
for(i=0;i<10;i++) {
// build dynamic controller methods
}
我一直在学习对象原型(prototype),我想我可以做类似的事情。
var pages = [{'pageButtons': Buttons},{'pageLogin': Login}];
for(var page in pages) {
for(var method in pages[page]) {
console.log(method) // write dynamic method here?
}
}
我的问题是上面的 block ,我该如何完成它,我可以在循环中添加新方法吗?有没有办法简化这种一遍又一遍添加相同代码的重复任务?
最佳答案
我认为你完全走在正确的道路上。我还认为,这里实际上存在两个问题。您概述了第一个和第二个,即动态创建路由并将其提供给您的路由器
。
设置您的Controller
View 方法和路由器
我正在考虑修改您的引用pages
对象,如下所示:
var pages = [
{'pageButtons': Buttons, route: 'buttons'},
{'pageLogin': Login, route: 'login'}
];
接下来我们声明 Controller 并添加动态方法
var Controller = Marionette.Controller.extend({}),
Router = Marionette.AppRouter.extend({});
for(var page in pages) {
for(var method in pages[page]) {
// Each method will be have a pointer in
// Controller.pagemethod, e.g. Controller.pageButtonsButtons
Controller[page + method] = pages[page][method];
// And now we set up the Router
// e.g. a url of http://appdomain#pagesButton will map to
// a method with name 'pageButtonsButtons'
Router[page] = page + method;
}
}
当然,自定义“方法工厂”的程度是无限的。您在引用 pages
对象中添加的属性越多,您的工厂就越具体。
我还想注意,这里我们没有将方法添加到Controller
的原型(prototype)中,只是为了简单起见。我认为我们可以在这里摆脱它,因为通常 Controller 被实例化一次,我们不一定需要扩展原型(prototype)来提高生产力。但是,如果这样做的话,功能上没有区别。
关于javascript - Marionette Controller 对象,创建动态原型(prototype)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29862261/