Backbone.js 视图中的回调

Backbone.js 视图中的回调,backbone.js,Backbone.js,这可能更多的是一个关于设计模式的问题——我希望它是有意义的 我正在使用主干网——我正在开发一个相对简单的应用程序,用户可以在其中添加请求(请求模型只是标题、描述和价格)。添加请求的唯一要求是用户“登录” 但是,我希望用户在检查用户是否登录之前“添加”请求(删除一个障碍)。我的意思是,用户填写表单,如果没有注册,他们必须注册,然后发送请求,如果他们登录,则发送请求。因此,最初呈现“addrequest”视图,当触发save时,将调用模型上的save,该模型调用服务器上的ajax请求。响应将返回tr

这可能更多的是一个关于设计模式的问题——我希望它是有意义的

我正在使用主干网——我正在开发一个相对简单的应用程序,用户可以在其中添加请求(请求模型只是标题、描述和价格)。添加请求的唯一要求是用户“登录”

但是,我希望用户在检查用户是否登录之前“添加”请求(删除一个障碍)。我的意思是,用户填写表单,如果没有注册,他们必须注册,然后发送请求,如果他们登录,则发送请求。因此,最初呈现“addrequest”视图,当触发save时,将调用模型上的save,该模型调用服务器上的ajax请求。响应将返回true(用户已登录并添加了请求)或false(用户未登录)

因此,假设用户没有登录,那么我希望呈现一个新的视图“register”,它可以让用户切换到“login”(另一个视图)。所以理论上用户可以从

Request (save)  -> Register -> Login -> Request (save)
假设用户随后注册(填写表单,然后调用registers view save方法,然后调用registers model save并返回ok)。然后我希望再次调用'request'save方法(现在用户将登录)。但是,我不希望注册/登录绑定到请求视图-理论上,新视图(假设我有一个sent message视图)需要类似的功能,例如尝试发出请求,如果无法将视图切换到注册-执行保存,然后调用一些回调

所以问题是什么是正确的方法

1) 我是否在引用“save”函数的请求视图中创建一些闭包,并将其存储在一个全局中,以便在成功时通过register/login调用? 2) 如上所述创建一个闭包,并将其传递给寄存器等(如果是这样,我将如何传递这个给定的寄存器/登录是一个视图)。 3) 是否传递对请求视图“this”的引用

到目前为止,我所拥有的只是,所以在《else》中,我会呈现“register”视图,但我很想知道最好的方法来做到这一点,而不会让它变得非常丑陋

save : function(event){
    if(this.model.isValid() == true) {
        this.$("#general_error").hide();
        this.model.set({'formattedPrice' : TB_H.formatPrice(this.model.get('currency'), this.model.get('price'))});
        self = this;
        this.model.save(this.model.toJSON(), {
                success: function(m, y) {
                    if(y.status == true) {
                        self.model = new TB_BB.Request(); 
                        Backbone.ModelBinding.bind(self);           
                        Backbone.Validation.bind(self);
                        $('#add-offer-button').show();
                    } else {                            
                        if(y.errors[0] == 'not logged in') {
                            this.$("#general_error").html('You are not logged in');
                            this.$("#general_error").show();                                
                        } else {                            
                            _.each(y.errors, function(key, val) { this.$("#general_error").html(key) });
                            this.$("#general_error").show();
                        }

                    }
                }, error : function(m,y) { 
                    this.$("#general_error").show();
                    this.$("#general_error").html("Something bad happened - please try again")
                }
            }
        );

    } 

非常感谢您的帮助

我在问了一个类似的问题后注意到了这一点,我刚刚删除了这个问题。我认为这不是大多数人在脊梁骨上做这件事的方式

我所做的是将不同的路由传递给同一个方法,如果id不为null,我将调用该路由

所以我有一个观点

base_view = Backbone.Views.extend({ initialize: function(id,a_id,b_id){ this.id = id; this.a_id = a_id; this.b_id = b_id; Myapp.data = new Myapp.Model.Base(); Myapp.data.url = '/data_url/'+id; Myapp.data.fetch(Myapp.data, { success: function(response){ // i have some nested collections, and models so i fill those in here Myapp.mainModel = new First_Child_Collection(response.attributes.first_child_array); }, error: function(){ alert('oops couldn't get data'); } }); Myapp.data.bind("fetched",this.render,this); }, render: function(){ new Main_View(); new Sub_View_1(this.id); new Sub_View_2(this.a_id); new Sub_View_3(this.b_id); } }); 基本视图=主干.Views.extend({ 初始化:函数(id、a\U id、b\U id){ this.id=id; this.a_id=a_id; this.b_id=b_id; Myapp.data=新的Myapp.Model.Base(); Myapp.data.url='/data_url/'+id; Myapp.data.fetch(Myapp.data{ 成功:功能(响应){ //我有一些嵌套的集合和模型,所以我在这里填充它们 Myapp.mainModel=新的第一个子集合(response.attributes.First子数组); },错误:函数(){ 警报(“oops无法获取数据”); } }); Myapp.data.bind(“fetched”,this.render,this); }, render:function(){ 新的主视图(); 新的子视图1(this.id); 新的子视图2(此.a\u id); 新的Sub_视图_3(此.b_id); } }); 然后在我的路线中,我没有为每一条路线设置新的路线,而是

routes: { "app/new": "new", "app/:id/edit/a/:a_id/b/:b_id": "edit" } edit { new base_view(id,a_id,b_id); } 路线:{ “应用程序/新”:“新”, “app/:id/edit/a/:a_id/b/:b_id”:“edit” } 编辑{ 新的基本视图(id、a\U id、b\U id); } 我不确定这是否完美,但我认为它比其他选项更干燥。在传递这些视图之前,我只需检查a_id或b_id是否未定义


希望能有帮助

我在问了一个类似的问题后注意到了这一点,我刚刚删除了这个问题。我认为这不是大多数人在脊梁骨上做这件事的方式

我所做的是将不同的路由传递给同一个方法,如果id不为null,我将调用该路由

所以我有一个观点

base_view = Backbone.Views.extend({ initialize: function(id,a_id,b_id){ this.id = id; this.a_id = a_id; this.b_id = b_id; Myapp.data = new Myapp.Model.Base(); Myapp.data.url = '/data_url/'+id; Myapp.data.fetch(Myapp.data, { success: function(response){ // i have some nested collections, and models so i fill those in here Myapp.mainModel = new First_Child_Collection(response.attributes.first_child_array); }, error: function(){ alert('oops couldn't get data'); } }); Myapp.data.bind("fetched",this.render,this); }, render: function(){ new Main_View(); new Sub_View_1(this.id); new Sub_View_2(this.a_id); new Sub_View_3(this.b_id); } }); 基本视图=主干.Views.extend({ 初始化:函数(id、a\U id、b\U id){ this.id=id; this.a_id=a_id; this.b_id=b_id; Myapp.data=新的Myapp.Model.Base(); Myapp.data.url='/data_url/'+id; Myapp.data.fetch(Myapp.data{ 成功:功能(响应){ //我有一些嵌套的集合和模型,所以我在这里填充它们 Myapp.mainModel=新的第一个子集合(response.attributes.First子数组); },错误:函数(){ 警报(“oops无法获取数据”); } }); Myapp.data.bind(“fetched”,this.render,this); }, render:function(){ 新的主视图(); 新的子视图1(this.id); 新的子视图2(此.a\u id); 新的Sub_视图_3(此.b_id); } }); 然后在我的路线中,我没有为每一条路线设置新的路线,而是

routes: { "app/new": "new", "app/:id/edit/a/:a_id/b/:b_id": "edit" } edit { new base_view(id,a_id,b_id); } 路线:{ “应用程序/新”:“新”, “app/:id/edit/a/:a_id/b/:b_id”:“edit” } 编辑{ 新的基本视图(id、a\U id、b\U id); } 我不确定这是否完美,但我认为它比其他选项更干燥。在传递这些视图之前,我只需检查a_id或b_id是否未定义


希望能有帮助

你是怎么熬过来的?我自己也遇到了类似的事情你是怎么解决的?我自己也遇到了类似的事情