【问题标题】:Backbone-Forms - best way to change select optionsBackbone-Forms - 更改选择选项的最佳方式
【发布时间】:2014-07-29 19:54:35
【问题描述】:

我正在寻找一种按需更改选择选项的最佳方法。我知道,我可以通过在表单字段上使用 setOptions 方法来交换选项,但在我的情况下它没有帮助。最好在创建表单之前更改选项。

在我的模型中,我有许多具有类似架构的字段:

field:{type:"Select",title:"", validators: ['required'], options:new App.Collections.SomeCollection()}

说,我需要创建表单,我不想将 SomeCollection 的所有元素都作为选择选项。我需要的很少,而且我可以获取那个集合,这没问题。在创建 Backbone Forms 实例之前有没有办法交换选项?我已经尝试过了,但到目前为止没有成功。我已经第二次遇到这个问题,我已经手动创建了选择(在 Backbone Forms 引擎之外,所以没有使用 data-fields 属性),然后还手动插入了选项,但我相信有更好的主意。

感谢您的任何想法!

【问题讨论】:

    标签: select backbone.js backbone-forms


    【解决方案1】:

    使用您的收藏的过滤版本。不要将 field.options 传递给负责映射和呈现选项的任何对象,而是传递集合的过滤版本。

    var filteredOptions = field.options.filter(function (optionModel) {
        // Some filter boolean check (true adds it to filteredOptions).
        return optionModel.get('key') !== 'UK';
    });
    

    每次您需要使用新的过滤版本的集合重新呈现选择时,您都会这样做。

    附:过滤器来自underscore

    【讨论】:

    • 感谢您的回复。在此之前我必须做 fetch,如下所示: model.schema.field.options.fetch({async:false});现在我看到这当然会返回有效模型,但我遇到了其他问题。我是这样传递的:model.schema.field.options = filteredOptions;但是选项显示为“未定义”,没有任何价值。如果我通过集合(元素很少)而不是数组,骨干形式正在重新创建整个集合,我再次获得所有模型......这是真正的问题,不是过滤,下划线已经是我的朋友了。
    猜你喜欢
    • 2010-09-23
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    相关资源
    最近更新 更多