2014-09-22 69 views
0

在我的应用程序中,我发现它实现了FrameView,它将扩展LayoutView,但会有一些额外的逻辑来保留帧标题等。(我的目标是让Region s处理显示标题)。扩展木偶视图

从Java的Swing的角度来看,LayoutView对我来说是JPanel,但我想它求助于JFrame崇拜者:-)

有没有办法延长木偶视图(和执行一些初始化)在这种方式下,initialize方法仍未使用? (我不想打扰用户与呼叫FrameView.prototype.initialize方法,使事情的工作)

这是我尝试(但上面提到的问题的困扰):

var FrameView = Marionette.LayoutView.extend({ 
    initialize: function() { 
    if(!this.title) this.title = null; 
    }, 
    setTitle: function(title) { 
    this.title = title; 
    this.trigger("change:title", title); 
    } 
}) 

理想的FrameView将结合LayoutViewBackbone.Model(所以我会得到像setTitle这样的方法是理所当然的,即使语法略有不同)。该视图的Backbone.Model部分将保留诸如标题,图标等等。

我仍然在学习Backbone.js和木偶,所以我的思维方式可能很奇怪。我会感谢你的答案和任何建议如何实现我的目标。

回答

1

如果您只是想您的视图对象上的默认title键,然后用钥匙延长您的视图原型:

var FrameView = Marionette.LayoutView.extend({ 
    title: null, 
    setTitle: function(title) { 
    this.title = title; 
    this.trigger("change:title", title); 
    } 
}) 
+0

谢谢你 - 就是这么简单! :-)对我来说唯一的“缺点”是我要么手工实现每个字段(标题,图标......),要么自己实现'Backbone.Model'-like功能(我不是满意,因为我宁愿重复使用已经完成的)。有没有办法在课堂中混合使用'Backbone.Model',这样我就不必关心单个字段(并实现更大的泛化)? – 2014-09-22 16:10:30

+0

为什么不首先使用'Backbone.Model'与您的观点? 'var FrameModel = Backbone.Model.extend({defaults:{}/* etc * /});' 'var frameView = new FrameView('Model:new FrameModel()}); model */frameView.model.set({title:'Hey'});' – Yura 2014-09-22 16:37:17

+0

这将失败的设计目的。我希望''FrameView'可以像'LayoutView'一样使用 - 只需要一些额外的功能。实例化视图时明确定义模型意味着用户必须每次都指定一个人工模型,这违反了使用'LayoutView'的API的要求。 (此外,当用户想要提供他的模型时,会引入问题。) – 2014-09-22 17:59:31