【问题标题】:Backbone model not updating with server data骨干模型未随服务器数据更新
【发布时间】:2014-10-15 03:01:52
【问题描述】:

我是 Backbone 的新手,我无法弄清楚这个问题。

这是我的模型:

var itinerary = Backbone.Model.extend({
    defaults: function() {
      return {
        ItineraryID: null,
        ItineraryString: "No itineraries",
        CreatorID: null,
        PublicFlag: false,
        CreateDate: null,
        LastUpdate: null
      }
    },
    urlRoot:'/dev/api/itineraries',
    idAttribute:'ItineraryID'
});

这是我从服务器获取给定行程的代码:

function show_saved_itinerary(tripID) {
    //Get itinerary from database
    var savedTrip = new itinerary({ItineraryID:tripID});

    savedTrip.fetch();
    thisTrip = savedTrip.get('ItineraryString');
}

我从服务器得到正确的响应,但“get('ItineraryString')”行返回默认值——“No itineraries”——而不是从服务器获取的位。

获取后模型如下:

({
    cid:"c1",
    attributes:{
        0:{
            ItineraryID:"21",
            ItineraryString:"44.8582569~-93.32529540000002~second sushi test~ChIJ7w_kLSDY94cRYTNjiDPPJa8",
            CreatorID:"1",
            PublicFlag:"0",
            CreateDate:"1412964129",
            LastUpdate:"2014-10-13 12:58:57"
        },
        ItineraryID:"21",
        ItineraryString:"No itineraries",
        CreatorID:null,
        PublicFlag:false,
        CreateDate:null,
        LastUpdate:null
    },
        _changing:false,
        _previousAttributes:{ItineraryID:"21", ItineraryString:"No itineraries", CreatorID:null, PublicFlag:false, CreateDate:null, LastUpdate:null},
        changed:{0:{ItineraryID:"21", ItineraryString:"44.8582569~-93.32529540000002~second sushi test~ChIJ7w_kLSDY94cRYTNjiDPPJa8", CreatorID:"1", PublicFlag:"0", CreateDate:"1412964129", LastUpdate:"2014-10-13 12:58:57"}},
        id:"21",
        _pending:false
})

所以它将服务器数据添加到“0:”属性内的模型中。

但是如何让它替换默认值,以便简单的 model.get() 调用将返回正确的值?

【问题讨论】:

  • 您必须显示来自您的服务器的响应

标签: javascript backbone.js


【解决方案1】:

我假设您的 JSON 响应实际上是一个 JSON 对象数组,在这种情况下,您需要先解析响应,然后再将其添加到模型中,方法是在模型定义中添加 parse 方法。

Backbone.Model.extend({
... 
 parse : function(resp){
    return resp[0];
 },
});

【讨论】:

  • 不,响应不是 JSON 对象数组。响应如下:[{"ItineraryID":"21","ItineraryString":"44.8582569~-93.32529540000002~second sushi test~ChIJ7w_kLSDY94cRYTNjiDPPJa8","CreatorID":"1","PublicFlag":"0","CreateDate":"1412964129","LastUpdate":"2014-10-13 12:58:57"}]
  • @SteveRay [] 表示数组。您发布的是一个带有 1 个对象的 json 数组。如果您尝试我的回答,您会发现它有效。
  • 我添加了它,它仍然返回默认值。模型如下所示:var itinerary = Backbone.Model.extend({ defaults: function() { return { ItineraryID: null, ItineraryString: "No itineraries", CreatorID: null, PublicFlag: false, CreateDate: null, LastUpdate: null } }, parse : function(resp){ return resp[0]; }, urlRoot:'/dev/api/itineraries', idAttribute:'ItineraryID' });
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 2018-09-06
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
相关资源
最近更新 更多