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

标签 javascript backbone.js prototype marionette

我正在将 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/

相关文章:

javascript - 在 Firebug 插件中提取 CSS 代码

javascript - JavaScript "for"中的奇怪事情

javascript - 为什么 HourGlass 无法在 Google Chrome 中使用同步 AJAX 请求?

javascript - 使用 Jasmine 测试 Marionette View 和 Handlebars 模板

javascript - Backbone.js 回退中哈希后的斜线 - 历史 pushState

javascript - 构造函数原型(prototype)循环引用 JavaScript

Javascript 警报框未显示

javascript - 在 jQuery UI 日期选择器中标记选定的日期

javascript - 正确使用 Backbone.js 和 Marionette 对集合进行分组

javascript - "Extend"highcharts图表添加属性和功能,原型(prototype)