0

我正在尝试使用 Backbone.Marionette 来构建应用程序。应用程序通过 REST 调用获取其数据。

在这个应用程序中,我创建了一个包含以下字段的模型:

  • ID
  • 姓名
  • 类型

我还创建了一个 ItemView,其中包含模型的完整表单。我使用的模板是这样的:

    <form>
            <input id="model-id" class="uneditable-input" name="id" type="text" value="{{id}}"/>
            <input id="model-name" class="uneditable-input" name="name" type="text" value="{{name}}" />
            <select id="model-language" name="language"></select>
            <select id="model-type" name="type"></select>
            <button class="btn btn-submit">Save</button>
    </form>

(我使用 Twig.js 来渲染模板)

我能够成功获取模型的数据并显示视图。

我现在要做的是使用选项填充模型语言和模型类型的选择框。由于 REST 调用,语言和类型字段也将被限制为值,即我有一个语言列表和一个通过 REST 提供给我的类型列表。

我正在考虑有两个集合,一个用于语言,一个用于类型,为每个集合创建一个视图(即 viewLanguageSelectOptions 和 viewTypeSelectOptions),它以我上面指定的模板的形式呈现选项。我不确定这是否可能,或者在哪里填充选项以及如何根据模型中的数据设置选定的选项。即使通过查看可用的示例和文档,我也不清楚,哪种 Marionette 视图类型可以最好地实现。也许我看错了方向。

换句话说,我现在被困住了,我想知道你们中的任何 Backbone Marionette 用户有什么建议或解决方案。希望你能帮忙!

4

1 回答 1

3

在我看来,在您描述的场景中不需要为 Select 创建一个视图,因为我假设您的语言列表不会经常更改,唯一的建议是提供一个从中选择值的列表,以便您可以使用 jquery 在视图的 onRender 或初始化函数中填充您的选择。

您可以在渲染视图之前调用 REST 服务并获取列表,并将此列表作为选项传递给视图,并在 onRender 函数上填充您的选择

var MyItemView = Backbone.Marionette.ItemView.extend({
    initialize : function (options) {
       this.languages = options.languages;
       this.typeList = options.typeList;
    },
    template : "#atemplate",
    onRender : function () {
         this.renderSelect(this.languages, "#languagesSelect", "valueofThelist");
         this.renderSelect(this.typeList, "#typesSelect", "valueofThelist")
    },
    renderSelect :function (list, element, value) {
        $.each(list, function(){
            _this.$el.find(element).append("<option value='"+this[value]+"'>"+this[value]+"</option>");
        });
    }
})


var languagesList = getLanguages();
var typeList = getTypesList();
var myItemView = new MyItemView({languages:languagesList,typeList :typeList });

希望这可以帮助。

于 2013-06-18T14:39:45.523 回答