2014-09-03 3 views
-1

Почему viewModel.availableCountries() недоступен в предупреждающем сообщении? Что не так в этом коде?ViewModel accessibility in KnockOutJS

<form id="form1" runat="server"> 
    <div> 
    Select the car: 
    <select ></select> 
    <script type="text/javascript"> 
     alert('The length of the array is ' + viewModel.availableCountries().length); 
     </script> 
    </div> 
     <script type="text/javascript"> 
      var viewModel = { 
       availableCountries: ko.observableArray(['France', 'Germany', 'Spain']), 
       chosenCountries: ko.observableArray(['Germany']) // Initially, only Germany is selected 
      }; 
      viewModel.chosenCountries.push('France'); 
      ko.applyBindings(viewModel); 
     </script> 
    </form> 
+3

Потому что ваш 'предупреждение()' сниппет работает до 'viewModel' даже создан, не говоря уже связаны ... – haim770

ответ

1

Как и ранее, haim770 уже сказал, что ваш код неправильный. Перед тем, как вы его создали, вы просматриваете viewModel.

Изменить его к следующему, и он должен работать нормально:

<form id="form1" runat="server"> 
    <div> 
    Select the car: 
    <select ></select> 
    </div> 
     <script type="text/javascript"> 
      var viewModel = { 
       availableCountries: ko.observableArray(['France', 'Germany', 'Spain']), 
       chosenCountries: ko.observableArray(['Germany']) // Initially, only Germany is selected 
      }; 
      viewModel.chosenCountries.push('France'); 
      ko.applyBindings(viewModel); 
      alert('The length of the array is ' + viewModel.availableCountries().length); // Moved this line down 
     </script> 
    </form> 
Смежные вопросы