Eso es lo que debe estar haciendo (al menos en teoría y/o documentación), pero al parecer eso no es lo que está haciendo. Estoy teniendo el mismo problema y creo que otros también: https://groups.google.com/forum/?fromgroups=#!topic/knockoutjs/uKY84iZaxcs
el objeto debe ser:
{ "someName" : [ { x: 1, y: "test" } ] }
para seguir con su esquema de objetos, puede utilizar ko.utils.arrayMap para mapear objetos a su modelo de vista KO : http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html
function Item(name, category, price) {
this.name = ko.observable(name);
this.category = ko.observable(category);
this.price = ko.observable(price);
this.priceWithTax = ko.dependentObservable(function() {
return (this.price() * 1.05).toFixed(2);
}, this);
}
//do some basic mapping (without mapping plugin)
var mappedData = ko.utils.arrayMap(dataFromServer, function(item) {
return new Item(item.name, item.category, item.price);
});
EDITAR
he hecho un poco más investigación en el th es y usted PUEDE realmente mapear el objeto de matriz JS con la asignación KO, sin embargo, el objeto después del mapa NO va a ser la matriz observable KO. Será simplemente normal objeto de matriz JS y, para el caso, que pueda datos se unen con KO:
var bd = [ { x: 1, y: "bd test" }, { x: 2, y: "bd test 1dsf" } ];
var bdViewModel = ko.mapping.fromJS(bd);
// 'bdViewModel' is NOT KO Observable Array, so you can't use KO Binding. However, all the properties of 'bdViewModel' (x and y) are KO Observable.
//ko.applyBindings(bdViewModel, $("#bd").get(0));
console.log(bdViewModel());
// 'bdViewModel' must be called as function (with open and close parentheses) to see the data.
$.each(bdViewModel(), function (i, d) {
$("#bdList").append("<li>" + d.y() + "</li>");
});
Aquí está la JSBin para la comparación de los mapas serie JS y JSON: http://jsbin.com/uzuged/5/
En la consola de Chrome asegúrese que está mirando el valor desenvuelto de la matriz observable 'myObservableArray()'. Puede ser engañoso cuando se imprime el Array observable. –
Como RP declaró ... solo estás buscando el valor equivocado. Aquí hay un violín que puede usar para verificar. Establezca un punto de interrupción en la línea ko.mapping y escriba: ko.mapping.fromJS (data) y verá []. Si escribe: ko.mapping.fromJS (data)() y verá [Object, Object, Object, Object]. http://jsfiddle.net/jearles/y4b9e/8/ –
Gracias chicos, Chrome me engañó al imprimir solo [] que indica una matriz vacía. Pero tiene toda la razón, si solo me mantengo detrás de la expresión, muestra el contenido correctamente. Genial para recibir comentarios tan pronto! Stackoverflow rocks ... – nttakr