Backbone.js 从视图调用主干控制器方法

Backbone.js 从视图调用主干控制器方法,backbone.js,Backbone.js,[主干网新增] 正在使用计划应用程序。用例为。 1) 用户单击“重新安排”按钮。[视图中] 2) 获取可用的时间表。[在控制器中] 3) 用户选择其中一个计划。[视图中] 4) 将更新的计划列表发布到服务器。[在控制器中] 5) 重新渲染视图 问题是(1)、(3)在视图中,(2)、(4)在控制器上 我需要路线视图->路线->控制器。对于每个步骤。 这是将事件传递给控制器的正确方法吗。有更好的方法吗?? 这就是使用主干网事件的情况。 文件夹结构。[使用要求、主干] ├───app │ ├───

[主干网新增]
正在使用计划应用程序。用例为。

1) 用户单击“重新安排”按钮。[视图中]
2) 获取可用的时间表。[在控制器中]
3) 用户选择其中一个计划。[视图中]
4) 将更新的计划列表发布到服务器。[在控制器中]
5) 重新渲染视图

问题是(1)、(3)在视图中,(2)、(4)在控制器上
我需要路线视图->路线->控制器。对于每个步骤。
这是将事件传递给控制器的正确方法吗。有更好的方法吗??
这就是使用主干网事件的情况。

文件夹结构。[使用要求、主干]

├───app
│   ├───managers
│   ├───models
│   ├───utils
│   └───views
├───lib
└───tpl
时间表模型

    Schedule = Backbone.Model.extend({
                initialize: function () {
                    console.log("Schedule model initialized");
                }
            }),
计划视图:

    events : {
                "click #cancel_login_trip" : "cancelLoginTrip",
                "click #cancel_logout_trip" : "cancelLogoutTrip",
            },

    cancelLoginTrip : function(){
                var tripindex = this.model.get('previousIndex')+1;
                tripindex  = "login_"+tripindex;
                Backbone.history.navigate('schedule/cancel/'+tripindex, {trigger:true,replace:true});   
            },
路线

调度经理[控制器]:

    this.cancelSchedule = function(dic){
                console.log("inside cancel schedule");
                console.log(dic);
                index = dic.tripindex;
                scheduleDaysize = configManager.getFeatureConfig(Constants.SCHEDULE,Constants.SCHEDULE_DAYS_AFTER);
                myAnalyticsLogger.debug(LogMessages.REQUEST_TO_DISPLAY_SCHEDULE + index);
                if(index<0){
                    var errorText= 'past schedule can not be viewed ';
                    errorModel.set({errorText:errorText,response:""});
                    return;
                }
                if(index >= scheduleCollection.length && scheduleDaysize != null){              
                    var errorText= 'this schedule can not be cancelled ';
                    errorModel.set({errorText:errorText,response:""});
                    return;
                }
                updateScheduleOnServer(scheduleCollection.length, 
                            scheduleCollection.length+scheduleDaysize); 
            };
this.cancelSchedule=功能(dic){
控制台日志(“内部取消计划”);
控制台日志(dic);
指数=dic.tripindex;
scheduleDaysize=configManager.getFeatureConfig(Constants.SCHEDULE,Constants.SCHEDULE\u DAYS\u AFTER);
myAnalyticsLogger.debug(LogMessages.REQUEST\u TO\u DISPLAY\u SCHEDULE+index);
如果(index=schedulecolection.length&&scheduleDaysize!=null){
var errorText='此计划不能取消';
errorModel.set({errorText:errorText,响应:'});
返回;
}
updateScheduleOnServer(scheduleCollection.length,
scheduleCollection.length+scheduleDaysize);
};

我个人的方法是创建许多小视图,并在大模型上使用所有逻辑,并删除中间控制器。若这不是一个选项,那个么将imho解耦的最佳方法就是通过全局事件模型

var vent = {}
_.extend(vent,Backbone.Events);

vent.on()
vent.trigger()

您可以使其适用于所有应用程序,或特定于域的一部分

1。显示一些代码2。我从来不知道主干中有一个叫做
控制器的东西!主干中没有控制器,只需将控制器代码移动到视图,不需要将事件传递到视图之外。这对我来说是不可能的,因为代码库很大,我已经从早期的开发中接管了。嗯。。。在这种情况下,
Backbone.Events
更合适。视图触发事件,控制器侦听这些事件。
var vent = {}
_.extend(vent,Backbone.Events);

vent.on()
vent.trigger()