gpt4 book ai didi

javascript - Marionette Controller 对象,创建动态原型(prototype)方法?

转载 作者:行者123 更新时间:2023-11-29 21:49:47 25 4
gpt4 key购买 nike

我正在为一个有很多页面的应用程序使用 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?
}
}

我的问题是上面的代码块,我该如何完成它,我可以在循环中添加新的方法吗?有没有一种方法可以简化这种反复添加相同代码的重复性任务?

最佳答案

我认为您完全走在正确的轨道上。我也认为,这里实际上有两个问题。您概述了第一个,第二个是动态创建和提供到您的 Router 的路由。

设置您的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com