在 javascript/backbone 中初始化模型元素

Initialize Model elements in javascript/backbone

我正在从 REST 获取嵌套的 JSON 数据。现在我想在变量中捕获该值。一切正常,但我不知道应该如何初始化该变量。

所以这是我的模型初始化方法。

initialize: function() {
        var self = this;
        if (!this.get('dropdownData')) {
                this.set({
                    dropdownData: []
                });
            }
        }
}

AJAX 呼叫:

fetchDropdown: function(data) {
            var self = this;
            var d = $.Deferred();
            var dropdownRequest = $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                url: this.urlRoot,
                data: JSON.stringify(data)
            });
            dropdownRequest.done(function(data)
            {
                self.set({
                            dropdownData: data
                        });
                console.log("JSON SUCCESS!! YAY!!");
                d.resolve();

            });

现在 dropdownData 应该初始化为 dropdownData: {} or dropdownData: [] 或者我根本不需要初始化它。

P.S:逻辑明智的代码片段正在运行。我只想知道在 BACKBONE MODEL

initialize 函数中初始化 dropdownData 的正确方法是什么

我建议完全避免在 initialize 方法中初始化 dropdownData,而是在这里使用 model.defaults。如果将以下内容添加到模型定义中:

defaults: function () {
  return {
    dropdownData: []
  };
},

...然后您可以删除 initialize 方法主体中的所有代码。此更改的结果是实例化模型将具有为 dropdownData 提供的值(在实例化时),模型将默认为指定的空数组。

注意这里使用defaults的函数版本很重要。如果您改为这样做:

defaults: {
  dropdownData: []
},

...那么任何未提供 dropdownData 值的实例化模型 将共享 dropdownData 的值。每个实例都将引用完全相同的数组。