2013-11-11 5 views
1

я эти строки, на мой взгляд:Обновить значение Ember TextField с помощью jQuery.val()

//this code is within a {{#each item in controller.content}} so id will not be unique 
//so by giving it just an id like i have is not going to work 
{{#each item in controller.content}} 
    <div class="pull-right" id="qnty-bulk">{{view Ember.TextField class="span1 qnty-bulk" id="qnty-bulk" valueBinding="item.qnty" type="number" min="1" max="9999999" disabled=true}}</div> 
    <button class="pull-right" {{ action "increase" }}> 
     Up 
    </button> 
{{/each}} 

В моем контроллере я имею в действиях

actions: { 
    increase: function() { 
     var inputField = $("#qnty-bulk"); //how can I access the Ember.TextField here for each of my items in the {{#each item in controller.content}}?? 
     var inputValue = inputField.val(); 
     inputValue = (inputValue != null && inputValue != '' ? (isNaN(inputValue) ? 0 : inputValue) : 0); 
     inputValue++; 
     console.log(inputField.val()); 
     inputField.val(inputValue); 
    }, 

я хочу, чтобы увеличить значение текстового поля по 1 каждый раз, когда я нажимаю кнопку «вверх» , как я могу это сделать? Можно ли использовать jquery?

ответ

1

Вы можете использовать jQuery. Но я думаю, что вам не хватает понятия привязки данных.

Вы сделали привязку значения для TextField, используя свойство item.qnty.

Ваше увеличение функции будет выглядеть примерно так:

actions: { 
    increase: function() { 
     var quantity = this.get('model.item.qnty'); 
     this.set('model.item.qnty', quantity++); 
    }, 
} 

Можно даже использовать функцию быстрого доступа:

actions: { 
    increase: function() { 
     this.increaseProperty('model.item.qnty'); 
    }, 
} 

Эмбер автоматически обнаруживает, что item.qnty изменилось и обновить значение в TextField ,

Вы никогда не должны обновлять свои значения Ember любыми другими средствами, кроме рамки Ember. Это может привести к тому, что ваше приложение Ember сломается или в этом случае работает не так, как ожидалось.

Редактировать, исходя из ваших комментариев.

Текущие HBS:

{{#each item in controller}} 
    <div {{action increase}} ></div> 
{{/each}} 

Это вызовет функцию increase в контроллере массива, где, как вы хотите, чтобы изменить элемент в массиве.

Позволяет указать контроллер элемента для элементов:

{{#each item in controller itemController='myItem'}} 
    <div {{action increase}} ></div> 
{{/each}} 

Вашего MyItemController:

App.MyItemController = Ember.ObjectController.extend({ 

    actions: { 
     increase: function(){ 
      this.increaseProperty('model.qnty'); 
     } 
    } 
}) 

Это будет запускать increase функции в контроллере элемента, где у вас есть прямой доступ к вашему пункту. Всегда полезно иметь ArrayController для ваших массивов и ObjectController для ваших элементов в этом массиве.

+0

спасибо, но ничего не отображается в текстовом поле, хотя и я получаю сообщение об ошибке: Не удалось Ошибка: объект в пути model.item не может быть найден или уничтожен. ? –

+0

Мне интересно, о 'item.qnty'. Что такое 'item' ?. Вы можете попробовать код выше без префиксов модели. –

+0

Элемент: {{# элемент в контроллере.content}} Я новичок в ember и пытаюсь изучить его на лету. Я прошел учебник ToDo, но пока не понимаю, и эта работа должна быть выполнена! :) –

0

Нельзя использовать jQuery.

Что вы можете сделать, это передать отдельный элемент вашего контента в действие increase и увеличить его значение внутри действия.

<div class="pull-right"> 
{{input value=item.qnty type="number" min="1" max="9999999" disabled=true}} 
</div> 
<button class="pull-right" {{ action "increase" this}}> 
Up 
</button> 

И в контроллере:

actions: { 
increase: function(item) { 
    var qnty = Ember.get(item,'qnty'); 
    Ember.set(item,'qnty',++qnty); 
} 
} 

Образец Jsbin, для случая использования.

+0

Вы будете размещать логику элемента в контроллере массива. По-моему, это плохая практика. –

+0

спасибо за ссылку на Jsbin! –

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