2012-02-06 3 views
2

У меня есть модель просмотра Knockout, заполненная множеством действий Mvc.knockout js - Как сделать условное связывание в выпадающем списке

  1. Категория выбрана из первого выпадающего списка (скажем, фрукты, мясо, напитки и т. Д.).

  2. Второе выпадающее меню автоматически заполняется с первого выбора. Тем не менее, может быть 2 матча для фруктов (скажем, яблоки, апельсины), 2 для мяса (например, говядина, баранина) и множество вариантов напитка (несколько сотен).

  3. В настоящее время на моей странице отображается окно поиска в зависимости от выбранной категории.

мне было интересно, как автоматически связать второй выпадающий список для Fruit & мяса, или подождать и сделать привязку из результатов поискового запроса.

Извините, это расплывчато - раздражительный клиент! Очень новичок в KnockoutJs.

Заранее спасибо.

+0

Как вы связали свои выпадающие списки с моделью просмотра? Можете ли вы опубликовать код? Обычно вы привязываете выпадающий список к объекту (т. Е .: массив) в модели viewmodel. По мере обновления этого массива выпадающий список обновляется. Скажем, ваш первый выпадающий объект привязан к arrayCategory, а второй выпадающий список привязан к arraySubCategory. Когда вы выбираете категорию, я предполагаю, что вы обновите объект arraySubCategory модели viewmodel. Как только вы это сделаете, второй раскрывающийся список должен автоматически показывать новые подкатегории. – Nope

+0

Этот артикул на наблюдаемых массивах (http://knockoutjs.com/documentation/observableArrays.html) показывает, как вы манипулируете массивами. По сути, все, о чем вам нужно беспокоиться, это обновление массивов и привязка их во время разработки к выпадающим спискам. – Nope

+0

Спасибо за ваш ответ. Я, наверное, не был таким ясным. То, что я пытаюсь сделать в моей модели просмотра, - это увидеть, выбрано ли выбранное значение = Apple - сделать это, если выбрано значение = Напитки - сделать что-то еще. –

ответ

1

Если я правильно понял, вы можете создать метод в своей модели просмотра, который вы привязываете к событию изменения выпадающего списка.

метод Примера:

var myViewModel = { 
    firstDropDownArray: ko.observableArray([]), 
    secondDropDownArray: ko.observableArray([]), 

    // Validates Selection 
    validateSelection: function (item) { 
     var anotherList; 

     switch (item.toUpperCase()) { 
      case "FRUIT": 
       // Do something... 
       break; 
      case "DRINKS": 
       // Do something else... 
       break; 
      default: 
     } 
    } 
}; 

Ваш Dropdown может связываться затем метод, как это:

<select id="FirstDropDown" data-bind="options: myViewModel.firstDropDownArray, <any other binding options>, event: {change: myViewModel.validateSelection(currentItem)}"> 
</select> 

Как указано здесь: event-binding,

При вызове обработчика, Нокаут будет поставлять текущую модель значение в качестве первого параметра.

Я предполагаю, что currentItem будет выбранным элементом, когда вы вызываете метод. Я знаю, что в своем примере кода я написал item.toUpperCase(), но это просто предположение, что элемент передан как строка. Этот синтаксис, очевидно, должен измениться в зависимости от того, как вы объявили и заполнили свой раскрывающийся список, но по существу вы все равно должны иметь возможность написать метод в своей модели просмотра, которую вы можете привязать к событию изменения, или к любому другому событию, которое вам нравится.

+0

Спасибо, Франсуа, я сыграю с этим и вернусь к вам. –

+0

Надеюсь, это поможет. В зависимости от того, что вы хотите сделать в ответ на «Фрукты» или «Напитки», вы всегда можете улучшить модель просмотра с дополнительными наблюдаемыми свойствами, которые вы изменяете на основе выбора, и привязывать их к другим элементам управления, которые должны реагировать на изменение. Например, 'searchIsVisible: ko.observable (false)', и вы можете установить это на 'true' или' false' по мере необходимости. Привяжите свойство 'searchIsVisible' к' видимому' обязательству вашего контроля поиска и счастливым дням. – Nope

+0

Спасибо, Франсуа. Ты поставил меня на правильный путь. –

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