是O.K.通过硬编码在值中重写Backbone.sync?

时间:2014-07-29 12:10:59

标签: javascript backbone.js

在这种特殊情况下,我在创建或POST的方法中进行了硬编码,并将两个模拟选项都设置为false。应用此逻辑后,我得到了更短的方法:

  // hard code in the emulation and method
  Backbone.sync = function(method, model, options) {
    options || (options = {});
    var params = {type: 'POST', dataType: 'json'};

    // Ensure that we have a URL.
    if (!options.url) {
      params.url = _.result(model, 'url') || urlError();
    }

    // Ensure that we have the appropriate request data.
    if (options.data == null) {
      params.contentType = 'application/json';
      params.data = JSON.stringify(options.attrs || model.toJSON(options));
    }
    params.processData = false;

    var xhr = options.xhr = Backbone.ajax(_.extend(params, options));
    model.trigger('request', model, xhr, options);
    return xhr;
  };

1 个答案:

答案 0 :(得分:1)

通常,硬编码的已接受答案是以使您的方法可重用的方式进行。你本质上是在努力为自己减少工作量。

在这种情况下,像POST和JSON这样的部分都可以。您是否认为自己计划将方法从POST更改为GET?你打算写一个GET方法吗?然后将其设为参数或可配置选项。 (我非常怀疑你的情况,但我只是以此为例)

在获取数据和所有这些方面,您似乎可以测试。 (因为你只想让自己的脚离开地面)。只记得为每个不同的数据案例添加方法switch语句......

编辑:方法开关在第一个参数上创建一个switch语句,该语句定义了对数据执行的操作类型。这是一个例子:

Backbone.sync = function(method, model, options) {
    options || (options = {});
    var params = {type: 'POST', dataType: 'json'};
    switch (method) {
       case 'create':           
       //Let's go make data (POST)
       ...
       break;

       case 'update':
       //let's go update our data
       ...
       break;

       case 'delete':
       //Let's remove some data
       ...
       break;

       case 'read':
       //let's go gather our data (GET)
       ...
       break;
   }
   return xhr;
};