2012-01-18 5 views
8

Tengo dos preguntas por favor:asignación de valores a octavos de final observable determinado dinámicamente por nombre de cadena

estoy usando nocaut (soy un novato sry KO) y me gustaría para asignar un valor a una específica nocaut observable sobre un evento clic, pero que solo debe determinarse sobre el evento clic en sí mismo (y el valor que pasaré a data-bind = click) ... se puede hacer por favor ... ¿puedo obtener la variable observable knockout? solo sobre su nombre (un valor de cadena) en lugar de tener que saber qué observable voy a asignar un valor de antemano?

Y, en segundo lugar, menos importante, si existe una función como ko.ObservableByName (stringName) es posible usarla de alguna manera y asignar la preselección de múltiples elementos seleccionados al cargar la página ... ¿y cómo?

He tratado de hacer esto ... He usado los datos -bind = "Click: loadData.bind ($ data, ' param1', 'param2')" y luego 'm capaz de conseguir esos param1 y param2 valores de cadena mediante la construcción de un controlador de eventos en mi modelo de vista nocaut que dice algo a lo largo de la línea de:

self.loadData = function (src, dest) { 
    //dest is 'param1', src is 'param2', both are stings 
    if (src == 'param1') 
     self.p1observable($('#' + dest).val()); 
    else 
     self.p2observable($('#' + dest).val()); 
} 

mi mayor problema con esto es que tengo que construir la función con observables p1/p2 ya especificados y codificado en él, pero realmente me gustaría obtener param1 y param2 para usar como nombres o referencias por nombre de algunos de mis observables, que luego podría pasar a voluntad (junto con un valor que se asignará, o mejor) aún otro observable me gustaría copiar el valor de a la primera), y así podría asignar valores pasados ​​en la llamada de función de clic directamente a un observable de mi elección (y no tener un gran número de funciones tan pequeñas) ...

¿Tal vez lo estoy haciendo mal? Tal vez no debería estar transmitiendo valores de cadena ... Tal vez debería tratar de pasar un objeto observable, pero ¿cómo se puede hacer eso dentro del enlace de datos? ¿Escribes myViewModel.myObservable o algo así?

+0

¿Puedes publicar un ejemplo de lo que has conseguido hasta ahora? – ericb

Respuesta

15

Si usted tiene su objeto principal, entonces se puede acceder a un observable mediante el uso de esta sintaxis:

viewModel[observableName]

y establecer el valor como:

viewModel[observableName](newValue)

Aquí es una muestra donde puede elegir el nombre de la propiedad de un menú desplegable y luego establecer el valor en consecuencia y otro en el que el botón está vinculado directamente a la configuración de un valor observable: http://jsfiddle.net/rniemeyer/CTnUQ/

+0

eso era casi exactamente lo que necesitaba, así que muchas gracias ... solo una nota al margen, si dentro de viewModel, use esta notación [nombreveedor] ... pero supongo que funcionará si la está usando desde fuera de viewModel construye, de lo que no estoy seguro es, si esto funcionaría si, por ejemplo, tuviera varias páginas diferentes y cada página cargara un script de viewModel externo, entonces muchas páginas usarían las mismas instancias de datos o harían cada una su propia copia de viewModel cargado desde un archivo .js externo? _Lo intentaré pronto, me quedé atrapado por JQMobile, y su fallo irresoluble de changePage en WP7_ – dada

Cuestiones relacionadas