私はバックボーンを使い始めましたが、コンパレータ駆動の並べ替えを機能させるのに問題があります。ページのナビゲーション メニューに入力するために使用している単純なコレクションがあります。MongoDB バックエンドから入力されています。
window.navItem = Backbone.Model.extend({
initialize: function(){
return {
"title": "no title",
"href": "",
"class": "",
"style": "",
"position": -1,
"showLog": false,
"showUnlog": false
}
},
});
window.navList = Backbone.Collection.extend({
url: "../nav",
initialize: function(){
},
model: navItem,
comparator: function(iNavItem){
return iNavItem.position;
},
});
View コードを含めるための編集: window.loggedIn 変数の状態を変更して、showLog/showUnLog プロパティに基づいて View メンバーを表示/マスクするためのロジックを持つ単なるスケルトン。
window.navView = Backbone.View.extend({
el: $('#navBar'),
initialize: function(){
var self = this;
this.model.bind("reset", this.render, this);
this.navTemplate = Handlebars.compile($("#navListTemplate").html());
},
events: {
"click #navLogIn" : "navLogIn",
"click #navLogOut" : "navLogOut"
},
render: function() {
this.json = _.where(this.model.toJSON(),
{showUnlog:(!window.loggedIn),
showLog:(window.loggedIn)});
$(this.el).html( this.navTemplate(this.json));
return this;
},
navLogIn: function() {
window.loggedIn = !window.loggedIn;
this.render();
},
navLogOut: function() {
window.loggedIn = !window.loggedIn;
this.render();
}
});
メニューが読み込まれ、コレクションが「位置」でソートされていないことを除いて、すべてが正常に機能しているように見えます。ナビゲーション メニューの 2 番目のスロットにあるはずのメニュー項目が 1 つありますが、MongoDB での編集のためにコレクションの最後にあります。「位置」の値は 2 番目に並べ替える必要がありますが、一貫してメニューの最後に表示されます。
サーバーから送信される JSON は次のとおりです。
[{
"_id": "50f6fe449f92f91bc1fcbcf6",
"title": "Account",
"href": "",
"htmlId": "",
"class": "nav-header",
"style": "",
"position": 0,
"showLog": true,
"showUnlog": true
},
{
"_id": "50f6fe449f92f91bc1fcbcf7",
"title": "Log In",
"href": "#",
"htmlId": "navLogIn",
"class": "",
"style": "",
"position": 10,
"showLog": false,
"showUnlog": true
},
{
"_id": "50f6fe449f92f91bc1fcbcf8",
"title": "New Account",
"href": "#",
"htmlId": "",
"class": "",
"style": "",
"position": 20,
"showLog": false,
"showUnlog": true
},
をちょきちょきと切る...
この最後のアイテムは適切な位置に並べ替えられておらず、代わりに最後に表示されます...
{
"_id": "50f6fe449f92f91bc1fcbcf9",
"class": "",
"href": "#",
"htmlId": "navLogOut",
"position": 10,
"showLog": true,
"showUnlog": false,
"style": "",
"title": "Log Out"
}]
theNavList.pluck('position') (theNavList は navList のインスタンス化されたコピーです) を呼び出すと、[0, 10, 20, 20, 30, 40, 50, 60, 70, 80, 90, 10] が得られます。
Firefox のコレクションで .sort() 関数を手動で起動しようとしましたが、表示されたメニューでもコレクション自体でも、コレクションのモデルの順序を修正できません。
ここで非常に単純なものが欠けているように感じます。