Backbone从Views调用Controller方法

时间:2014-12-12 07:19:40

标签: backbone.js

[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); 
            };

1 个答案:

答案 0 :(得分:0)

我个人的方法是创建许多小视图,并拥有包含所有逻辑的大型模型并放弃中间控制器。如果这不是一个选项,那么解耦imho的最佳方式是通过全局事件模型

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

vent.on()
vent.trigger()

您可以将其全局用于所有应用程序,或者特定于域的一部分