Knockoutjs получает element.id через подписку

У меня есть выбор ввода, созданный со значением наблюдаемого. Я подписываюсь на наблюдаемое, но не могу получить идентификатор выбранного ввода.

<select data-bind="options: firstName, optionsText: 'name', value: $parents[0].selectCategory, attr: {'id': lastName}">
</select>

self.selectedCategory.subscribe(function(category) {
  console.log(this);
  console.log(this.target());
}, this);

Я не могу на всю жизнь получить идентификатор выбранного элемента. Я могу получить значение параметров (которые здесь не заданы) и функцию, которой принадлежит selectedCategory, но не могу получить идентификатор. Я почти уверен, что мог бы легко сделать это с помощью jquery.click, но мне интересно, смогу ли я сделать это с помощью .subscribe().

Любые мысли или комментарии?


person Jimmy Long    schedule 22.06.2014    source источник


Ответы (1)


Я не совсем уверен, что именно вы подразумеваете под id. И ваши привязки немного испорчены. Если вы имеете в виду идентификатор каждого выбранного ввода, вы можете использовать optionsValue в своих привязках:

<select data-bind="options: names, optionsText: 'name', optionsValue: 'id', value: selectedName, attr: {'id': lastName}">
</select>

self.names = [
        { name: 'Name 1', id: 1},
        { name: 'Name 2', id: 2},
        { name: 'Name 3', id: 3}
    ];

Я оставил определение attr, которое вы добавили, хотя технически оно ничего не значит, просто для того, чтобы вы могли уточнить, зачем оно вам может понадобиться.

Если вы заинтересованы в получении id каждого выбранного элемента при изменении, вы можете сделать это следующим образом:

    self.selectedName.subscribe(function(name) {
       console.log(name);           
    }, this);

Или, конечно, вы можете получить его по нажатию кнопки [в другой функции] следующим образом:

    self.alertName = function(){
        alert(self.selectedName());    
    };    

Полная демонстрация.

Я надеюсь, что это поможет, и, пожалуйста, дайте нам знать, если это то, что вы изначально имели в виду.

person Diana Nassar    schedule 22.06.2014
comment
Привет Диана, спасибо за ответ. Извините, если я не ясно выразился, но я имею в виду, что хочу получить идентификатор выбранного элемента. Как я уже сказал, я могу получить значение выбранного параметра, как вы показали выше. Определение attr устанавливает идентификатор <select></select>, что я и хочу получить. Я не хочу получать значение выбранного <option></option>, но атрибут ID элемента <select></select>, частью которого он является. - person Jimmy Long; 22.06.2014
comment
Почему нельзя использовать console.log(self.lastName);? - person Diana Nassar; 22.06.2014