2013-04-20 45 views
-1

我想用Backbone.save模型,該模型的巢數據需要進行濾波,所以我用另一骨幹樁數據

model.save(null,{ 
    success: ..., 
    error:..., 
    data: { 
     id:null, 
     name:'myname', 
     nestmodel: { 
      id:'xx'/*Other data i don't need it,so just id column*/ 
     } 
    } 
} 

而且我不希望使用patch HTTP方法。因爲我只是添加一個新模型,而不是更改零件數據。

而且我不想發佈一些nestmodel數據,因爲它很大,我只想要id是好的。

nestmodel只需要id。

我已讀同步(Backbone.js的)和Backbone.js的/ express.js參數時model.save()

還有就是要解決這個問題的方式排除模型屬性。

這就是我的整個代碼:

sync: function(method, model, options) { 
    var data, orderSuiteItems; 
    if (method === 'create') { 
    options.url = this.url; 
    } else { 
    // MUST setting the url .options's url is undefined 
    options.url = this.url + this.idUrl(this.get('id')); 
    } 
    // IF `create` or `update` , pick the we need properties 
    if (method === 'create' || method === 'update') { 
    orderSuiteItems = []; 
    if (this.has('orderSuiteItems')) { 
     // Because the `dishes` and `dishesUnitPrice` have a lot of prop, 
     // Each of `dishes` or `dishesUnitPrice` may each have 10K data 
     orderSuiteItems = _.map(this.get('orderSuiteItems'), function(osi) { 
     return { 
      id: osi.id, 
      qty: osi.qty, 
      servingQty: osi.qty, 
      confirmQty: osi.confirmQty, 
      deleted: osi.deleted, 
      orderItem: _.pick(osi.orderItem, 'id'), 
      dishes: _.pick(osi.dishes, 'id'), // HAVE a large prop 
      dishesUnitPrice: _.pick(osi.dishesUnitPrice, 'id'), // HAVE a large prop 
      orderItemStatus: osi.orderItemStatus, 
      piece: osi.piece 
     }; 
     }); 
    } 
    data = { 
     id: this.get('id'), 
     order: this.get('order'), 
     price: this.get('price'), 
     dishes: _.pick(this.get('dishes'), 'id', 'isSuite'), 
     dishesUnitPrice: _.pick(this.get('dishesUnitPrice'), 'id'), 
     qty: this.get('qty'), 
     servingQty: this.get('servingQty'), 
     confirmQty: this.get('confirmQty'), 
     sum: this.get('sum'), 
     orderSuiteItems: orderSuiteItems, 
     orderItemStatus: this.get('orderItemStatus') 
    }; 
    // Setting attrs with pick data. 
    options.attrs = data; 
    return Backbone.sync(method, model, options); 
    } else { 
    return Backbone.sync(method, model, options); 
    } 
} 
+0

你只是想發送'id'?目前還不清楚你在找什麼。 – WiredPrairie 2013-04-20 22:19:24

+0

我想Nestmodel只需要id – sjbwylbs 2013-04-21 05:49:58

+0

只要調用jQuery的Ajax方法,併發布你想要的數據,如果你的需求不滿足的內置API。 – WiredPrairie 2013-04-21 10:56:23

回答

-1

我希望你只是把data選項的例子的清楚起見。

無論如何,在使用Model#save之前,如何使用unset來刪除屬性?之後重新設置。
另一種解決方案是覆蓋Model#save方法。
你也可以shadow通過將它定義爲一個屬性而不是在原型中(這會讓你有機會切換回來)相同的方法。

解決方案#1或類似的將是最簡單的。解決方案#2可能更多,比方說,風險很大,但可能會有更少的樣板。我只會在一些非常特殊的情況下使用#3(甚至不會考慮現在的情況),其中包括:對象是單例(因爲我們沒有使用原型)(或僅限於有限數量) ,需要切換2種模式,最好只有1種方法。

編輯:
解決方案#1:

var nestedModel = myModel.get('nestmodel'); 
myModel.save('nestmodel', nestedModel.id, {silent: true}); 
myModel.set('nestmodel', nestedModel, {silent: true}); 

我加入了silent標誌,因爲我不知道你是否聽你nestmodel屬性的變化。如果這個解決方案不適合你,我會爲其他解決方案添加代碼。

+0

您的建議可能是好的,但我不能認爲沒有代碼.. – sjbwylbs 2013-04-21 06:05:52

+0

@sjbwylbs看到我的編輯。 – Loamhoof 2013-04-21 10:36:08

+0

'save'和'set'不會那樣工作。 – WiredPrairie 2013-04-21 10:49:17