Вычисление суммарного значения с помощью JsViews

Мне нравится отображать две сводные данные на моей странице с помощью привязки jsviews. Пользовательский интерфейс будет примерно таким, как на скриншотах.

введите здесь описание изображения

Пользователь может добавить/удалить человека из списка, и это повлияет на значение «Количество людей», и пользователь может редактировать целочисленное значение в текстовом поле, а общие значения будут отображаться в «Общая сумма».

Да. Мне удалось заставить его работать. Пожалуйста, посмотрите мой код. http://jsfiddle.net/michaelsync/eqhkzv3t/3/

Но я думаю, что это очень некрасиво, esp: этот код ниже.

function observeAmounts(){    
  people.forEach(function (person){
    $.observe(person, 'amount', function(e) {
        var amount =0;
        people.forEach(function(person){
            amount += parseInt(person.amount);
        });
        $('#output2').html('Total Amount: ' + amount);
    });
   });
}

 observeAmounts();

$.observe(people, function(e) {
    var l = $.map(people, function(n, i) { return i; }).length;
    $('#output1').html('Total No. of People: ' + l);
     observeAmounts();
});

Ну, я все еще читаю учебники и исходный код/тест jsviews. но я в значительной степени новость для JsViews. В моем текущем коде я продолжаю зацикливать массив, чтобы вычислить общее количество и количество людей. Я думаю, что смогу зарегистрировать вспомогательный класс, но мне все равно придется зацикливать массив «люди» для вычисления значения.

Итак, я считаю, что в JsViews может быть лучший способ. Поскольку сайт JsViews рекомендует нам публиковать вопросы здесь, а автор JsViews также находится здесь, я решил опубликовать его здесь, чтобы получить аванс при выполнении этих сводных данных. (Да, вы также можете просмотреть мой тестовый код здесь http://jsfiddle.net/michaelsync/eqhkzv3t/ 3/ )

Любой совет будет принят во внимание. Спасибо!


person Michael Sync    schedule 08.09.2014    source источник
comment
Извини. По какой-то причине мой код исчез в jsfiddle. Я добавлю его обратно.   -  person Michael Sync    schedule 08.09.2014
comment
Я думаю, что это должно быть /3/..   -  person Michael Sync    schedule 08.09.2014
comment
Кстати, вы также можете «установить в качестве базовой» версию /3, чтобы вы могли обновить ее позже, не нарушая ссылки...   -  person BorisMoore    schedule 08.09.2014
comment
Конечно. Спасибо за совет. я. Я сделаю это..   -  person Michael Sync    schedule 09.09.2014


Ответы (1)


Я создал обновленную версию вашего jsfiddle здесь: http://jsfiddle.net/BorisMoore/wch601L9/

Главное, что вы упустили из того, что поможет, — это использованиеObservAll:

http://www.jsviews.com/#observeAll

$.observable(people).observeAll(totalAmount);

Я также добавил несколько разных подходов для других вещей:

Декларативные привязки событий:

<td><button data-link="{on ~remove}">Remove</button></td>

Связывание данных верхнего уровня для отображения длины массива:

<span id="getLength" data-link="length"></span>

и

$("#getLength").link(true, people);

(См. также этот пример: http://www.jsviews.com/#samples/editable/toplevel-for для связывания данных верхнего уровня)

person BorisMoore    schedule 08.09.2014
comment
Это потрясающе! Большое спасибо! - person Michael Sync; 09.09.2014