Javascript jsRender可选模型属性

Javascript jsRender可选模型属性,javascript,jquery,jquery-plugins,jsrender,Javascript,Jquery,Jquery Plugins,Jsrender,我想让我的jsRender模板选择性地包含一个“options”属性,以便在不包含属性的情况下提供可选的回退;如果包含“选项”属性,则具体呈现一个元素,如果不包含,则呈现另一个元素。如果传入的模型包含有问题的属性,则一切正常,但即使{{if typeof~options.someOption!=='undefined'}}也会给我错误:无法读取undefined的属性'someOption'。 有人处理过这件事吗?如果是这样,您如何处理传入的不存在的模型的属性 编辑:这个问题实际上是关于如何处理

我想让我的jsRender模板选择性地包含一个“options”属性,以便在不包含属性的情况下提供可选的回退;如果包含“选项”属性,则具体呈现一个元素,如果不包含,则呈现另一个元素。如果传入的模型包含有问题的属性,则一切正常,但即使
{{if typeof~options.someOption!=='undefined'}}
也会给我
错误:无法读取undefined的属性'someOption'。

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


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

您可以利用这样一个事实,即在Javascript中,不存在的东西计算为“未定义”,这在条件语句中等同于false,并将“if”围绕您试图访问的包含对象和属性

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


如果options和someOption都存在,则模板将使用options.someOption进行渲染。否则它将不起任何作用。

这是否更符合您希望执行的操作,[link])虽然这很酷,但它更关注jsViews和数据绑定。我的问题更关注渲染以及模板的选择/渲染方式。您可以确保创建模型继承自该模型。在主干中,您将创建一个模型并设置其默认值,然后确保基于该模型创建的每个新模型都是安全的即使您可能不提供这些属性,也可以将其设置为拥有所有属性。var Model=Backbone.Model.extend({defaults:{“prop1”:“value1”,“prop2”:“value2”});然后创建一个新模型。var Model=new Model({“prop1”:“new value”});Model现在既有prop1又有prop2。