2015-01-26 2 views
0

У меня проблема с невозможностью привязать мои данные, а затем отобразить ее с помощью cshtml. Я пробовал разные методы создания наблюдаемых массивов, и я думаю, моя основная проблема связана с попыткой использовать мои якобы «ограниченные данные» ... Ниже приведен код cshtml (C# -html), а затем мой код js.Связывание данных с нокаутом JS

<!--*****Unfinished*****--> 
        <td> 
         <label class="element-label">Continuous (Vibratory) Acceleration</label> 
         <select class="form-control device-family-selector" , data-bind="options: changeAuxFlange.availableVForces, optionsText: 'forceName', value: changeAuxFlange.selectedForces, optionCaption: 'Choose a force...'"></select> 
        </td> 
        <td> 
         <input style="width:50px; text-align:right;" , data-bind="text: changeAuxFlange.selectedForces" /> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <label class="element-label">Maximum (Shock) Acceleration</label> 
         <select class="form-control device-family-selector" , data-bind="options: changeAuxFlange.availableSForces, optionsText: 'forceName', value: changeAuxFlange.selectedForces, optionCaption: 'Choose a force...'"></select> 
        </td> 
        <td> 
         <input style="width:50px; text-align:right;" , data-bind="value: changeAuxFlange.selectedForces" /> 
        </td> 
        <!--**********--> 

вид модели:

"use strict"; 
function ViewModel() 
{ 
    // it would make more sense with the current setup to make the ViewModel be the Application, but I have set it up like this in case some day it is desired that this tool creates multiple applications in one session 
    this.application = ko.observable(new Application('New Application', this)); 
    this.requestSearchMode = ko.observable(false); 
} 

function Application(name, parentViewModel) 
{.... 
this.sections = 
    { 
     gForceSection: initGforceSection(this), 
     pumpSection: initPumpSection(this), 
     calcLoadsSection: initCalcLoadsSection(this) 
    }.... 
} 

    function initGforceSection(application) 
{ 
    var data = ko.observableArray(); 

    var gForceSection = new Section('G-Forces', data, application); 


    var self = this; 
    var Force = function (name, value) { 
     this.forceName = name; 
     this.forceValue = value; 
    }; 
    var vibForce = { 
     availableVForces: ko.observableArray([ 
      { vForce: "Skid steer loader", value: 4 }, 
      { vForce: "Trencher (rubber tires)", value: 3 }, 
      { vForce: "Asphalt paver", value: 2 }, 
      { vForce: "Windrower", value: 2 }, 
      { vForce: "Aerial lift", value: 1.5 }, 
      { vForce: "Turf care vehicle", value: 1.5 }, 
      { vForce: "Vibratory roller", value: 6 } 
     ]), 
     selectedForces: ko.observable() 
    }; 
    var shockForce = { 
     availableSForces: ko.observableArray([ 
      { sForce: "Skid steer loader", value: 10 }, 
      { sForce: "Trencher (rubber tires)", value: 8 }, 
      { sForce: "Asphalt paver", value: 6 }, 
      { sForce: "Windrower", value: 5 }, 
      { sForce: "Aerial lift", value: 4 }, 
      { sForce: "Turf care vehicle", value: 4 }, 
      { sForce: "Vibratory roller", value: 10 } 
     ]), 
     selectedForces: ko.observable() 
    }; 


    gForceSection.families = ko.observableArray(); 
    productData.getPumpFamilies(function (data) { 
     gForceSection.families(data); 
     addPump(application); 
    }); 

    gForceSection.tbxNumberofPumps = ko.computed(function() { return gForceSection.data().length }); 

    return gForceSection; 
} 
//CREATE VIEWMODEL 
var viewModel = new ViewModel; 

ko.applyBindings(viewModel); 
/******/ 
+0

Не смейте звонить, чтобы применить привязки. – dbugger

+0

Да, извините, у меня это есть. Я включил в фрагменты информации, которые вам могут понадобиться, чтобы помочь мне. – user3374835

+1

Не вижу, где changeAuxFlange даже ассоциируется с вашей моделью просмотра или даже с экземпляром. – dbugger

ответ

1

В ViewModels представляет собой серию вложенных объектов, что делает ссылки довольно сложным. Я вижу, что вы пытаетесь логически структурировать данные, но это затрудняет помощь. Нокаут имеет context для привязки, который начинается с привязанной модели. Вы можете изменить контекст для элемента/раздела, используя привязку with.

В противном случае вы должны дать нокауту полный путь, например. data-bind="value: app.gforcesection.someitem.someProperty - это может быть причиной ошибок, если элемент в пути не определен.

Я удалил много структуры, чтобы сделать его рабочий образец, чтобы попытаться помочь: http://jsfiddle.net/Quango/3y9qhnv9/

Новый ViewModel теперь «плоский» объект со всеми свойствами на него непосредственно. Я не был уверен, почему вы привязали поля ввода к силе, поэтому я поменял те, которые привязаны к значению свойства каждого из них. Надеюсь, это поможет вам в правильном направлении.

+0

да очень полезно, спасибо. Просто, если бы я хотел использовать все слои, я бы сделал что-то вроде ... data-bind = "options: viewModel.application(). InitGforceSection (application) .availableVForces, ... и т. Д. – user3374835

+0

Да, вы _could_, но лучше всего избегать, если это возможно. Если возможно, используйте «с» bindin, если можете. http://www.knockmeout.net/2011/06/10-things-to-know-about-knockoutjs-on.html имеет полезный советы. – Quango

Смежные вопросы