0

私は次のモデルとコレクションを持っています:

var UserModel = Backbone.Model.extend({
    url: 'api/user',
    idAttribute:'username',
    defaults: {
        username:'',
        password:'',
        email:'',
        tags:''
    }
});
var UserCollection= Backbone.Collection.extend({
    url: 'api/user',
    model: UserModel
});

以下を使用してコレクションからユーザーを取得する場合:

var myUser  =   collection.get(username);

ユーザー名は正しい大文字と小文字を区別する必要があります。そうでない場合、結果としてnullになります。

このような特定の操作のケースを無視するようにバックボーンに指示する方法はありますか?

4

1 に答える 1

1

もちろん、関連するコードを変更するだけです。これは次の行240-242にありbackbone.jsます(文書化された0.9.2バージョンの場合):

get: function(attr) {
  return this.attributes[attr];
},

次のように変更します。

get: function(attr) {
   // will skip if null or undefined -- http://stackoverflow.com/questions/5113374/javascript-check-if-variable-exists-which-method-is-better
   if (this.attributes[attr] != null) {
       return this.attributes[attr];
   }
   // and then try to return for capitalized version -- http://stackoverflow.com/questions/1026069/capitalize-the-first-letter-of-string-in-javascript
   else {           
       return this.attributes[attr.charAt(0).toUpperCase() + attr.slice(1)];
   }
},

コレクション変更用

get: function(id) {
  if (id == null) return void 0;
  return this._byId[id.id != null ? id.id : id];
},

このようなものにうまくいくかもしれません:

get: function(id) {
  if (id == null) return void 0;
  var firstCase = this._byId[id.id != null ? id.id : id];
  if (firstCase != null) {
      return firstCase;
  }
  else {
      return this._byId[capitalize(id.id) != null ? capitalize(id.id) : capitalize(id)];
  }
},
于 2012-07-26T07:54:00.597 に答える