【问题标题】:jsRender optional model propertiesjsRender 可选模型属性
【发布时间】:2013-03-20 13:27:56
【问题描述】:

我想让我的 jsRender 模板可选地包含一个“选项”属性,以便在不包含属性时提供可选的后备;如果包含“options”属性,则专门呈现一个元素,否则呈现另一个元素。如果传入的模型包含有问题的属性,一切正常,但即使{{if typeof ~options.someOption !== 'undefined'}} 给我Error: Cannot read property 'someOption' of undefined.

有人处理过这个吗?如果是这样,您如何处理传入的模型的不存在的属性?

编辑:这个问题实际上是关于如何处理模型的缺失属性。给定一个具有属性 A 和 B 的模型,如果模型中缺少属性 B,但在模板中引用了它,我该如何防止错误消息并优雅地处理它的缺失?

【问题讨论】:

  • 这是否更符合您的目标,[link]borismoore.github.com/jsviews/demos/step-by-step/…)
  • 虽然这很酷,但它更专注于 jsViews 和数据绑定。我的问题更核心是渲染以及如何选择/渲染模板。
  • 您可以确保创建模型继承自模型。在 Backbone 中,您将创建一个模型并设置它的默认值,然后您基于此模型创建的每个新模型都保证具有所有属性,即使您可能不提供它们。 var Model = Backbone.Model.extend({ defaults: { "prop1": "value1", "prop2": "value2" });然后创建一个新模型。 var model = new Model({"prop1": "新值"});模型现在同时具有 prop1 和 prop2。

标签: javascript jquery jquery-plugins jsrender


【解决方案1】:

您可以利用 Javascript 中不存在的事物评估为“未定义”的事实,这相当于条件语句中的 false,并在您尝试访问的包含对象和属性周围包裹一个“if”。所以,用你的例子,你会喜欢

{{if options}}{{if options.someOption}}{{:options.someOption}}{{/if}}{{/if}}

如果 options 和 someOption 都存在,则模板将使用 options.SomeOption 呈现。否则它什么也做不了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2021-01-08
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多