/ / Načítať problémy v chrbtovej kolekcii pomocou id - javascript, jquery, backbone.js, undererscore.js, handlebars.js

Načítať problémy v chrbticovej zbierke s ID - javascript, jquery, backbone.js, underscore.js, handlebars.js

Nasleduje môj JSON:

[
{
"id" : "1",
"type" : "report"
},
{
"id" : "2",
"type" : "report"
},
{
"id" : "1",
"type" : "email"
},
]

Zvážte, json sa vracia z chrbticeinkaso -> servisné volanie. Teraz, keď používam odpoveď json na vykreslenie mojej tabuľky html pomocou systému chrbtice a šablóny riadidiel. Zobrazia sa 2 riadky, namiesto toho by mali byť 3 riadky.

Poznámka: kolekcia Parse response vracia správny json (t. j. 3 riadky). Keď prepíšem id použitím kolekcie zbierky s jedinečným náhodne vygenerovaným číslom sa zobrazia všetky 3 riadky. To nie je v poriadku, pretože nechcem meniť id.

Chcem, aby sa riadok zobrazil takto:

1 reports
2 reports
1 email

odpovede:

2 pre odpoveď č. 1

Z dokumentácie pre Zbierka pridať,

Všimnite si, že pridanie rovnakého modelu (model s rovnakým id) do a zbierka viac ako raz je ne-op.

Aj keď nevidím dôvod, prečo by dva rôzne objekty mali mať rovnaké ID, môžete mať platný dôvod. Jedným z návrhov by bolo pridať ďalšiu vlastnosť ku každému objektu v odpovedi json, _dummyId a nastavte ju na autoinkrementujúcu hodnotu zo strany servera. Na strane klienta v kóde definície modelu potom nastavíte idAttribute na _dummyId.

Odpoveď JSON,

[
{
"id" : "1",
"_dummyId": "1",
"type" : "report"
},
{
"id" : "2",
"_dummyId": "2",
"type" : "report"
},
{
"id" : "1",
"_dummyId": "3",
"type" : "email"
},
]

Definíciu vášho modelu, z http://backbonejs.org/#Model-idAttribute,

var Meal = Backbone.Model.extend({
idAttribute: "_dummyId"
});

To znamená, že dúfam, že v chrbtovej kosti je elegantné prostredie, čo spôsobuje, že kolekcia chrbtice pôsobí ako zoznam namiesto súboru.


1 pre odpoveď č. 2

Ak to chcete vyriešiť, musíte pre každý model, ktorý pridáte do kolekcie, nastaviť nový jedinečný identifikátor. Vyskúšajte tento postup:

initialize: function() {
this.set("id", this.generateID());
},
generateID = function () {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0, v = c == "x" ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}

Ak potrebujete pôvodné ID, musíte ho uložiť pred a po vytvorení nového nastavíte originál v inom atribúte modelu. Keď som robil nastavenie @ amith-george, chrbtica ma ignorovala idAttribute do iného dummyId