如何将 Backbone.Marionette.ItemView 与 Mustache 一起使用

2024-01-17

使用以下代码可以正常工作Backbone.Marionette.ItemView但不是Mustache.

Backbone.Marionette.ItemView - 无小胡子 http://jsfiddle.net/derickbailey/me4NK/

我想使用相同的代码,但使用加载模板变量Mustache.

这是我的代码:

Backbone.Marionette.ItemView - 带小胡子 http://jsfiddle.net/me4NK/76/

知道为什么吗my code http://jsfiddle.net/me4NK/76/不起作用,为什么?

Thanks


我想在这里更新一下答案,因为我只是在努力解决这个问题,并且我使用这个答案作为参考。

以下是我的发现:

这里的答案与当前版本有点过时了Mustache(这是可以理解的,因为它很旧)

  • 小胡子.to_html现已弃用,但仍然作为简单的包装器存在小胡子渲染用于向后兼容。查看此链接 https://github.com/janl/mustache.js/blob/master/mustache.js#L550-L559.

此外,我发现压倒性的木偶.渲染器.渲染,如上面接受的答案所示,完全绕过了Marionette.TemplateCache层,这可能不是所需的行为。

这是该的来源木偶.渲染器.渲染 method:

render: function(template, data){

  if (!template) {
    var error = new Error("Cannot render the template since it's false, null or undefined.");
    error.name = "TemplateNotFoundError";
    throw error;
  }

  var templateFunc;
  if (typeof template === "function"){
    templateFunc = template;
  } else {
    templateFunc = Marionette.TemplateCache.get(template);
  }

  return templateFunc(data);
}

Source https://github.com/marionettejs/backbone.marionette/blob/master/src/marionette.renderer.js#L12-L29

正如你所看到的,它访问Marionette.TemplateCache.get方法和上面的答案对维护该功能没有任何作用。

现在开始我的解决方案(注意:上面的答案不一定是错误的;这只是我维护Marionette.TemplateCache layer):

正如上面的评论所建议的,覆盖编译模板反而:

Marionette.TemplateCache.prototype.compileTemplate = function(rawTemplate) {

    // Mustache.parse will not return anything useful (returns an array)
    // The render function from Marionette.Renderer.render expects a function
    // so instead pass a partial of Mustache.render 
    // with rawTemplate as the initial parameter.

    // Additionally Mustache.compile no longer exists so we must use parse.
    Mustache.parse(rawTemplate);
    return _.partial(Mustache.render, rawTemplate);
};

这是一个有效的 JSFiddle 作为证明 http://jsfiddle.net/aubricus/ktG52/.

在小提琴中,我也重写了Marionette.TemplateCache.loadTemplate证明它只被调用一次。函数体仅添加一些调试输出,然后重新实现大部分原始功能(减去错误处理)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Backbone.Marionette.ItemView 与 Mustache 一起使用 的相关文章

  • Backbone.js 控制器中的默认路由?

    我想为我的backbone js 控制器设置默认路由 目前我是这样做的 class DealSearchController extends Backbone Controller routes list showListView phot
  • 如何将属性传递到 Backbone 视图?

    我正在使用 Backbone v1 0 0 开发我的应用程序 在开始工作期间 现在已经更新到 v1 1 0 所以在我以前能做的地方 var myView new MyView hash something 并访问hash在视图内部使用 th
  • 如何在 Backbone.js 的模型中放置集合?

    我想了解如何在模型中添加集合结构 我的简单应用程序有团队 因此团队模型和团队集合 每个团队都有一群玩家 玩家模型和玩家集合 所以它的视觉结构是这样的 Team A Player 1 Player 2 Player 3 Team B Play
  • 在Javascript中,这个下划线是什么意思?

    var Gallery Backbone Controller extend index null photos null album null subalbums null subphotos null data null photosv
  • 如何为每个有小胡子的javascript使用?

    我有一些 json 对象 其中一些对象内部还有一些其他对象 如果我只留下其中没有其他 obj 的 json obj 然后应用模板 一切都会顺利 我得到 在本例中为 3 li 元素 但如果我获取原始的 json obj 结果会有点复杂 我相信
  • Coffee HAML 中的部分内容 (.hamlc)

    我在 Rails 后端使用backbone js哈姆咖啡 https github com netzpirat haml coffee 它是由haml 咖啡 资产 https github com netzpirat haml coffee
  • 在骨干模型上声明变量而不设置默认值

    我刚刚开始使用backbone js 我正在寻找一种在模型上声明字段而无需提供默认值的方法 它实际上仅供参考 以便当我开始创建实例时 我可以看到需要初始化哪些字段 用java之类的东西我会写 public class CartLine St
  • 类型错误:“未定义”不是函数(评估“sinon.spy()”)

    我正在尝试使用sinon js http sinonjs org 在测试骨干应用程序时 但不幸的是 由于错误 我无法使用间谍方法 TypeError undefined is not a function evaluating sinon
  • Backbone.View“el”混淆

    视图应该如何el被处理 必须设置它 否则事件不会触发 请参阅here https stackoverflow com questions 4909564 backbone js why isnt this event bound 但它应该是
  • 车把模板的文件扩展名

    我更改了车把模板的扩展名 并在调用 handlebarjs 编译函数的函数中引用了相同的扩展名 它工作得很好 没有任何问题 但我很好奇是否还有其他人尝试过 如果您认为这可能会因任何原因导致问题 请告诉我 出于某种原因 我觉得扩展名 hand
  • Backbone.js / Marionette.js 中的路由 - 无主题标签、路由列表和子路由器

    我对 Backbone js Marionette js 中的路由有三个问题 1 如何获取我的应用程序路由器已注册的所有路由的列表 例如对于 Express js 在 Node js 中 它将是app routes 我尝试对 Backbon
  • 如何定义与 Backbone 一起使用的 jade 模板

    我需要使用模板来渲染每个 ItemView var ItemView Backbone View extend className item template template itemTemplate html initialize fu
  • 对周围的所有 Node JS 框架/库等感到困惑 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我感觉有点困惑 有很多 Node js 相关 东西 的框架 有人能给我一个概述吗 以下库 框架 其他内容如何相互关联 交互 其中包括什么或
  • Backbone-relational 无法实例化两个 RelationalModel 对象

    我正在尝试实现 BackboneRelational 并不断获得 无法实例化多个 Backbone RelationalModel 每种类型都有相同的 ID class App Models User extends Backbone Re
  • MarionetteJS:应用程序区域与布局[重复]

    这个问题在这里已经有答案了 我正在阅读最新版本 2 3 0 的文档 它说应用程序区域现已被弃用 应用领域 警告 已弃用 此功能已弃用 而不是使用 应用程序作为视图树的根 您应该使用布局 看法 要将布局视图的范围限制为整个文档 您可以设置 它
  • 如何有一个后备路由来捕获backbone.js中的未知页面

    我设置了一组如下所示的路线 routes home home home page home 我想知道的是 如何配置路由 以便如果用户请求未知页面 我可以轻松重定向到静态 404 html 页面 在您的路由器中 例如前两条路由 routes
  • Golang GAE - 小胡子结构中的 intID

    这是一个Example https www dropbox com sh ur2ws1jnik6euef PjVJSwDTUc Blog Golang zip该应用程序的 关键代码在 golang code handler handler
  • 简单的 Backbone 搜索页面 - 您会怎么做?

    我想使用 Backbone 实现一个简单的搜索页面 它不是单页应用程序 但仍然想使用 Backbone 构建我的 JavaScript 代码 搜索页面由搜索表单和搜索结果组成 搜索是通过 AJAX 完成的 并且必须保存在历史记录中 从历史记
  • 将 RequireJS 与遗留代码结合使用

    我正在处理一个非常大的项目 该项目使用 包含带有脚本标记的 javascript 文件的旧版 JSP 页面 使用其他 javascript 模块而不使用 RequireJS 的骨干模型和视图 现在 我们希望开始将 RequireJS 与 j
  • 迭代带有小胡子的数组

    如何获取迭代中当前元素的引用 my array p what goes here p my array 我希望我只是忽略了显而易见的事情 根据规范的变更日志 https github com mustache spec blob maste

随机推荐