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()