骨干和最佳实践越来越配置JSON(Backbone and best practice gettin

2019-09-29 03:08发布

我有一个JSON文件看起来像这样。

{   
    "config": {
        "setting1": 'blabla',
        "setting2": 'blablabla'
    },
    "content": {
        "title": "Title of an exercise.",
        "author": "John Doe",
        "describtion": "Exercise content."
    },
    "answers": [
        {
            "id": "1",
            "content": "Dog",
            "correct": true
        },
        {
            "id": "2",
            "content": "Fish",
            "correct": false
        }
    ]
}

不是,我创建了一个骨干视图,从内容模型相结合,和答案(这是随机选择的,但现在不是最重要的)。

我也有一个配置,它具有的设置,将定其观点和收集方法使用。

这似乎是一个简单的任务,但我是新来的骨干,我不知道这是获取JSON文件的最佳途径,创建具有URL一个模型,JSON,也比使用解析和初始化创建另一个模型和集合(与答案),或使用$ .getJSON方法,将创建正是我需要的型号?

使用$ .getJSON我试着

$.getJSON(source, function(data) {
    var contentModel = new ContentModel(data.content);
    var contentView = new ExerciseView({ model: contentModel });

    var answerCollection = new AnswersCollection();
    _.each(data.answers, function(answer) {
            answerCollection.add(answer);
    });

    var answersView = new AnswersView({collection: answerCollection});

    $(destination).html( contentView.render().el );
    $('.answers').append( answersView.el );
)};

但它似乎不是很优雅的解决方案,我知道,这个应用程序需要良好的架构,因为它会基于“配置”其他许多意见进行开发。

希望大家给我一些建议,有一个美好的一天!

Answer 1:

我认为你做了什么工作正常,是正确的。 但是你可能需要重构一点点,因为“它会基于‘配置’其他许多意见进行开发”。

恕我直言,你需要做的第一件事就是处理失败在你的getJSON回调,使这一进程更加稳健。

其次,因为你的逻辑是基于从服务器的配置数据不同的看法是建立一个工厂来生成你的意见非常有用。 所以工厂可能:

contentViewFactory.generate = function(data) {
    var config = data.config;
    ....
    var ActualContentView = SomeContentView;
    var contentModel = new ContentModel(data.content);
    return = new ActualContentView({ model: contentModel });
}

如果你的逻辑很简单,你可以从配置一个字典地图可以观看像类:

var viewMaps = {
    "exercise" : ExerciseView,
    "other": SomeOtherView,
    //....
}

如果每个工作流有AnswersView你可以保持在你的getJSON回调。 因此,也许现在你的getJSON看起来是这样的:

$.getJSON(source, function(data) {
    // keep the config->view logic in the factory
    var contentView = contentViewFactory.generate(data);

    var answerCollection = new AnswersCollection();
    _.each(data.answers, function(answer) {
        answerCollection.add(answer);
    });

    var answersView = new AnswersView({collection: answerCollection});

    $(destination).html( contentView.render().el );
    $('.answers').append( answersView.el );
})
.fail(){
    //some failure handling
};

此外,如果你有你“的内容查看”的共同逻辑,这是自然的,你可以有一个“BaseContentView”或“ContentViewMixin”提取共同的逻辑和应用延伸到使你的代码更OO:

Backbone.View.extend(_.extend({}, ContentViewMixin, {
    //.....
}

所以,如果有人试图添加新的内容查看,他/她只需要在出厂前添加一些代码,使通过配置来产生新的看法。 然后延伸到实施新的查看ContentViewMixin。



文章来源: Backbone and best practice getting config JSON