视图内部的骨干数据逻辑

时间:2015-07-08 07:53:16

标签: javascript backbone.js

我不知道在哪里执行为我的视图模板准备数据的操作。目前我有这段代码。

getTemplateData: function () {
        var inventoryStatus = selectedDevice.get("inventoryStatus"),
            data = {},
            statusName,
            inventoryDate;
        statusName = getConfigValue("pdp", "statusMap", inventoryStatus);
        data.message = getConfigValue("pdp", "statusMessage", statusName);
        data.className = "";
        data.dataAttribute = null;
        data.tooltipValue = null;
        data.displayError = false;



        var redirectCode = (allDevices.get("thirdPartyRedirectCode") !== null) ? allDevices.get("thirdPartyRedirectCode") : "";
        if (redirectCode) {
            if (redirectCode === 9999) {
                data.buttonDisabled = false;
                data.buttonText = "Design Yours";
            } else if (redirectCode === 9998) {
                data.buttonDisabled = true;
                data.buttonText = "Design Yours";
            }
            return false;
        }



        switch(inventoryStatus) {
            case 1001: //Out of Stock
                data.buttonDisabled = true;
                data.displayError = true;
                break;
            case 1002: //Pre Order
                data.buttonDisabled = false;
                break;

        }

        return data;
    }

这个getTemplateData()我在视图的render函数中调用。它的外观似乎有误,我不确定在哪里放置此代码。 我应该在我的模型中创建不同的getter,还是应该将它们放在我的主视图中。请帮忙。

1 个答案:

答案 0 :(得分:2)

据我所知,“正确”的做法是把它放在模型中,并在视图中

getTemplateData: function () {
    return this.model.getTemplateData();
}

编辑

如果某个视图有多个模型(不应该发生这种情况,而不会立即进入您的决策),您可以为每个模型设置getTemplateData,并使用extend之类的方式调用它们:

getTemplateData: function () {
    var data = this.model1.getTemplateData();
    data = $.extend(data, this.model2.getTemplateData());
    return data;
}

<强> BUT 你真正应该做的是,恕我直言,给出每个人自己的观点,其中一个较小,并打算包括在另一个中。 (即bigView.$el.append(smallView.el)