我有一个 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
}
})
}
});
} );
当一个函数完成时,我的 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实际上是控制器,而不是视图
答案 0 :(得分:1)
在MVC世界中,您的视图不应该对模型有任何了解:您的控制器应该负责将模型映射到View,反之亦然。实际上,如果没有比Backbone提供的更严格的框架模型,这可能很难实施,但如果你现在解耦这些概念,从长远来看你会更快乐。
所以,让我们重新解释你的问题。而不是:
如何在view.js onSync函数中确定哪些函数响应是从模型发送的?换句话说,是使用了doRejectBatch函数还是来自doPatchBatch函数的响应?
短语如下:
如何在
lessRows <- which(df1$col1 < df2$col2) df3 <- merge(df1, df2)[lessRows, ]
期间确定要显示的正确消息?在MVC世界中,你会做类似的事情:
onSync
或doRejectBatch
。在这些方法中,设置doPatchBatch
或status
标记。state
事件,或者仅关注它关注的属性(sync
或status
)state
处理程序(不是视图)中,使用适当的状态呈现更新的视图(例如,调用onSync
方法或类似方法,仅显示消息所需的信息。根据您的要求,可能不是整个模型或响应对象;它可能只是一个状态指示器。)您可能还希望探索其他设计,如MVP或MVVM。根据您的应用程序的要求和复杂性,其中一种模式可能比传统的MVC更适合您。
答案 1 :(得分:0)
您可以触发模型中每个函数的不同事件,例如:this.trigger('reject:batch')和this.trigger('patch:batch')。然后,您的视图中会有一个不同的处理函数,例如
this.model.on('reject:batch',function(){/ *批处理拒绝的特定处理程序代码* /);