Backbonejs确定哪个函数从模型向视图返回了响应

Backbonejs determine which function returned a response from the model to the view

本文关键字:视图 返回 响应 模型 函数 Backbonejs      更新时间:2023-09-26

我有一个view.js和一个名为user.js

的模型

user.js:

define( function ( require, exports, module )
{
    "use strict";
    var Backbone = require( 'backbone' );
    return Backbone.Model.extend({
        defaults: {
            flush: false
        },
        doRejectBatch: function( batchId, flushToConveyer ){
            this.functionName = 'doRejectBatch';
            this.flush = flushToConveyer;
            this.fetch({
                type: 'GET',
                url:'http://api.com/reject/' + id +'/rej',
                xhrFields: {
                    withCredentials: true
                }
            });
        },
        doPatchBatch: function( batchuuid ){
            var patchData = {
                "status": "rejected",
                "jobs_to_conveyer": this.flush
            };
            this.fetch({
                type: 'PATCH',
                url: 'http://api.com/api/rej/' + uuid,
                contentType: 'application/json',
                data: JSON.stringify(patchData),
                xhrFields: {
                    withCredentials: true
                }
            })
        }
    });
} );

当一个函数完成时,调用my view.js中的onSync函数。

 onSync: function ( rawData, response ){
        var msg = "Reject Request: successfull";
        app.regionMessage.show(new  MessageView({
            model: new Backbone.Model({
                msg_type: response[0].status,
                msg: msg
            })
        }));
    }
});

我如何在view.js onSync函数中确定哪个函数的响应是从模型发送的?换句话说,是用doRejectBatch函数还是用doPatchBatch函数的响应?注意,view。js实际上是控制器而不是视图

在MVC世界中,你的视图不应该真正了解你的模型:你的控制器应该负责映射模型到视图,反之亦然。在实践中,如果没有比Backbone提供的更严格的框架模型,这可能很难实现,但如果现在将这些概念解耦,从长远来看,您会更高兴。

那么,让我们重新表述你的问题。而不是:

我如何在view.js的onSync函数中确定哪个函数的响应是从模型发送的?换句话说,doRejectBatch函数是使用的还是来自doPatchBatch函数的响应?

这样表达:

如何确定onSync期间显示的正确消息?在MVC世界中,你可以这样做:

  • 模式:呼叫doRejectBatchdoPatchBatch。在这些方法中,设置statusstate标志。
  • 控制器:绑定到模型的sync事件,甚至只绑定到它关心的属性(statusstate)
  • 控制器:在控制器的 onSync处理程序(不是视图的)中,用适当的状态(例如,调用displayStatusMessage方法或类似的方法)呈现更新后的视图,仅显示消息所需的信息。根据您的需求,这可能不是整个模型或响应对象;它可能只是一个状态指示器。)

您可能还希望探索其他设计,如MVP或MVVM。根据应用程序的需求和复杂性,其中一种模式可能比传统的MVC更适合您。

您可以从模型中的每个函数触发不同的事件,例如:this.trigger('reject:batch')和this.trigger('patch:batch')。然后在视图中有一个不同的处理函数,例如

this.model。On ('reject:batch', function(){/*这里批拒绝的特定处理程序代码*/);