Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 更新主干木偶项目视图的某些部分_Backbone.js_Marionette - Fatal编程技术网

Backbone.js 更新主干木偶项目视图的某些部分

Backbone.js 更新主干木偶项目视图的某些部分,backbone.js,marionette,Backbone.js,Marionette,我是Backbone.js和Backbone.marionete的新手,在尝试遵循应用程序的最佳模式时遇到了一些问题 我正在创建一个由PhoneGap封装的移动web应用程序。我有一个通用的布局(类似于Facebook):2个侧栏,一个主标题和一个内容区域,所有视图都在其中加载 我的主干网初始化代码。木偶应用程序是: var App = new Backbone.Marionette.Application(); App.addRegions({ leftRegion: '#left-

我是Backbone.js和Backbone.marionete的新手,在尝试遵循应用程序的最佳模式时遇到了一些问题

我正在创建一个由PhoneGap封装的移动web应用程序。我有一个通用的布局(类似于Facebook):2个侧栏,一个主标题和一个内容区域,所有视图都在其中加载

我的主干网初始化代码。木偶应用程序是:

var App = new Backbone.Marionette.Application();

App.addRegions({
    leftRegion: '#left-drawer',
    rightRegion: '#right-drawer',
    headerRegion: '#header',
    contentRegion: '#content',
    mainRegion: '#main'
});
这是我将附加内容的区域。稍后,在初始化路由器之后,我有下一个:

App.headerRegion.show(App.Views.Header);
App.leftRegion.show(App.Views.LeftSidebar);
App.rightRegion.show(App.Views.RightSidebar);
这将把我的内容加载到这个新区域。问题发生在HeaderView中。“我的标题”视图的模板:

<button id="open-left"><img src="assets/img/icons/menu-icon.png"></button>
<h1 class="title logo"><img src="assets/img/logo.png" height="28px" width="167px"></h1>
<button id="open-right"><img src="assets/img/icons/chat-icon.png"></button>
在应用程序的某些部分,我不想使用标题中的
。应用程序的某些页面需要将其更新为文本,例如
设置
。我的问题是,最好的方法是什么?或者更好的办法是什么?现在我不知道从哪里开始,我脑子里唯一的想法就是创造 使用另一个模板创建新的ItemView


提前谢谢

木偶为这种情况提供了一个有用的函数getTemplate,您可以使用这个函数代替模板:模板声明,如下所示

SampleView = Backbone.Marionette.ItemView.extend({
   getTemplate: function(){
      if (this.model.get("foo")) 
          return "#sample-template";
      else       
          return "#a-different-template";
   },
});

因此,在yur应用程序中,如果需要不同的模板而不需要图像,只需更改视图或模型上的一个值,该值可用于此函数,以便在调用render时对模板进行更改。

因此,如果我没有弄错,我的ItemView应该使用一个模型。然后,将其附加到区域。当我想更改名称时,我应该编辑模型,ItemView将被重新呈现,因为它将使用
getTemplate
来检测更改。是这样吗?非常感谢。使用模型是可选的,您可以只使用视图的一个新属性,根据场景更改属性值并调用render,一旦调用render,将调用getTemplate,它将检查属性值,或者您也可以使用模型执行此操作。但我认为关键是使用getTemplate函数。
SampleView = Backbone.Marionette.ItemView.extend({
   getTemplate: function(){
      if (this.model.get("foo")) 
          return "#sample-template";
      else       
          return "#a-different-template";
   },
});