【发布时间】:2015-02-10 20:57:39
【问题描述】:
[Backbone 新手]
按计划工作 应用程序.use case 是。
1) 用户点击重新安排按钮。 [在视图中]
2) 获取可用的时间表。 [在控制器中]
3) 用户选择时间表之一。 [查看中]
4) 将更新的日程表发布到服务器。 [在控制器中]
5) 重新渲染视图
问题是 (1),(3) 在 View 上,(2),(4) 在 Controller 上。
我需要路由视图-> 路由-> 控制器。每一步。
这是将事件传递给控制器的正确方法吗?有没有更好的方法??
这是使用 Backbone.Events 的情况吗?
文件夹结构。 [使用 Require , Backbone ]
├───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});
},
路线
cancelSchedule : function (tripindex) {
var t = tripindex.split("_");
var dic={};
dic.tripindex = parseInt(t[1]);
dic.triptype = t[0];
scheduleManager.cancelSchedule(dic);
},
调度管理器[控制器]:
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);
};
【问题讨论】:
-
1.显示一些代码 2. 从来不知道主干中有一个叫
controller的东西! -
骨干中没有
controller这样的东西,只需将控制器代码移至视图即可,无需将事件传递到视图之外。 -
这对我来说是不可能的,因为我已经从早期的开发人员那里接手了庞大的代码库。
-
hmm... 在那种情况下
Backbone.Events会更合适。视图触发事件,控制器监听这些事件。
标签: backbone.js