Tengo un pequeño problema al establecer el valor inicial de un menú desplegable. El código siguiente es la definición del modelo de vista y la inicialización en $(document).ready
. Tengo una matriz llamada sourceMaterialTypes
y una selectedSourceMaterialType
que representa el valor seleccionado de esa matriz. Estoy inicializando el modelo de vista con valores del Modelo (ASP.Net MVC) y ViewBag.Valor inicial/predeterminado vinculante de la lista desplegable (selección)
var viewModel = {
sourceMaterialTypes :
ko.observableArray(@Html.Raw(Json.Encode(ViewBag.SourceMaterialTypes))),
selectedSourceMaterialType :
ko.observable(@Html.Raw(Json.Encode(Model.SourceMaterialType))),
ingredientTypes :
ko.observableArray(@Html.Raw(Json.Encode(ViewBag.IngredientTypes))),
selectedIngredientType : ko.observable()
};
$(document).ready(function() {
ko.applyBindings(viewModel);
viewModel.selectedSourceMaterialType.subscribe(function(newSourceMaterialType) {
$.getJSON("/IngredientType/FindByMaterialType",
{ "id": newSourceMaterialType })
.success(function (data) {
viewModel.ingredientTypes($.parseJSON(data));
})
.error(function() { alert("error"); });
});
});
La siguiente es la definición de mi lista desplegable (select) con la definición de enlace Knockout.
<select id="SourceMaterialTypeId"
name="SourceMaterialTypeId"
data-bind="options: sourceMaterialTypes,
optionsText: 'Name',
optionsValue : 'Id',
value: selectedSourceMaterialType"></select>
Este
todo funciona bien, excepto por el valor inicialmente seleccionada en el menú desplegable de materiales básicos (selectedSourceMaterialType
está enlazado correctamente por lo que cuando la selección desplegable cambia su valor se actualiza correctamente, es sólo la selección inicial que estoy teniendo un problema with), que siempre es el primer elemento en la matriz sourceMaterialTypes
en mi modelo de vista.
Me gustaría que el valor inicialmente seleccionado sea el que se inicializa desde el modelo (del lado del servidor) como el valor de selectedSourceMaterialType
ver la propiedad del modelo.
esto debería estar funcionando bien; compruebe la fuente del html generado y vea qué se está representando desde '' selectedSourceMaterialType: ko.observable (@ Html.Raw (Json.Encode (Model.SourceMaterialType))) 'Sospecho que es un parámetro vacío. – neebz
@nEEbz no, no está vacío .... 'selectedSourceMaterialType: ko.observable ({" Id ": 2," Nombre ":" Fruta "," Descripción ":" Fruta fresca "," MeasuredIn ": 1," MeasuredInValue " ": 1}),' es lo que se representa, sin embargo, la selección inicial es el primer elemento en sourceMaterialTypes .... que se representa como 'sourceMaterialTypes: ko.observableArray ([{" Id ": 1," Name ":" Coffee Bean "," Descripción ":" Granos de café crudos "," MeasuredIn ": 0," MeasuredInValue ": 0}, {" Id ": 2," Name ":" Fruit "," Description ":" Fresh Fruit "," MeasuredIn ": 1," MeasuredInValue ": 1}])', (la selección inicial es "Coffee Bean") –
Supongo que solo debe pasar el Id y no el objeto completo en la función observable Selected SourceTaterial - > 'selectedSourceMaterialType: ko.observable (2)' – neebz