[Backbone的新手]
制定计划App .use case is。
1)用户点击重新安排按钮。 [视图]
2)获取可用的时间表。 [在控制器中]
3)用户选择一个计划。 [视图]
4)将更新的计划列表发布到服务器。 [在控制器中]
5)重新渲染视图
问题是(1),(3)在视图上,(2),(4)在控制器上。
我需要路由View - >路线 - >控制器。每一步。
这是将事件传递给控制器的正确方法。有没有更好的方法?
这是使用Backbone.Events的情况。
文件夹结构。 [使用Require,Backbone]
├───app
│ ├───managers
│ ├───models
│ ├───utils
│ └───views
├───lib
└───tpl
日程表模型。
Schedule = Backbone.Model.extend({
initialize: function () {
console.log("Schedule model initialized");
}
}),
ScheduleView:
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);
};
答案 0 :(得分:0)
我个人的方法是创建许多小视图,并拥有包含所有逻辑的大型模型并放弃中间控制器。如果这不是一个选项,那么解耦imho的最佳方式是通过全局事件模型
var vent = {}
_.extend(vent,Backbone.Events);
vent.on()
vent.trigger()
您可以将其全局用于所有应用程序,或者特定于域的一部分