私はWebアプリを構築しており、KnockoutJSを使用するようにUIを変換しようとしています。私はノックアウトの完全な初心者ですので、親切にしてください!
通常、私は(PHPを使用して)従業員リストをロードし、従業員が選択されている場合は、JQueryを使用してその従業員のIDを見つけ、バックエンドに対してAJAX呼び出しを行い、結果ボックスに入力して下にスライドします。
Knockoutでこの動作を再現する方法はありますか?
私はWebアプリを構築しており、KnockoutJSを使用するようにUIを変換しようとしています。私はノックアウトの完全な初心者ですので、親切にしてください!
通常、私は(PHPを使用して)従業員リストをロードし、従業員が選択されている場合は、JQueryを使用してその従業員のIDを見つけ、バックエンドに対してAJAX呼び出しを行い、結果ボックスに入力して下にスライドします。
Knockoutでこの動作を再現する方法はありますか?
開始するための定型文は、jQueryとKnockoutを使用します。
HTML
<ul data-bind="foreach: employees">
<li data-bind="css: {current: $data == $root.selected()}, click: $root.selected">
#<span data-bind="text: id"></span> - <span data-bind="text: name"></span>
</li>
</ul>
<div data-bind="slideVisible: ! loading(), html: employee_detail"></div>
CSS
.current {
background: blue;
color: white;
}
ul>li {
list-style: none;
}
JS
$(function() {
// for your requirment on sliding animation, this slideVisible is copied from http://knockoutjs.com/documentation/custom-bindings.html
ko.bindingHandlers.slideVisible = {
update: function(element, valueAccessor, allBindings) {
var value = valueAccessor();
var valueUnwrapped = ko.unwrap(value);
var duration = allBindings.get('slideDuration') || 400;
if (valueUnwrapped == true)
$(element).slideDown(duration); // Make the element visible
else
$(element).slideUp(duration); // Make the element invisible
}
};
var vm = {
employees: ko.observableArray([
// build your initial data in php
{id: 1, name: 'John'},
{id: 2, name: 'Tom'},
{id: 3, name: 'Lily'},
{id: 4, name: 'Bob'}
]),
selected: ko.observable(), // a placeholder for current selected
loading: ko.observable(false), // an indicator for ajax in progress
employee_detail: ko.observable() // holder for content from ajax return
};
// when user selects an employee, fire ajax
vm.selected.subscribe(function(emp) {
var emp_id = emp.id;
// ajax starts
vm.loading(true);
$.ajax('/echo/html/?emp_id='+emp_id, {
// just a simulated return from jsfiddle
type: 'POST',
data: {
html: "<b>Employee #" + emp_id + "</b><p>Details, bla bla...</p>",
delay: 0.2
},
success: function (content) {
// update employee_detail
vm.employee_detail(content);
},
complete: function() {
// ajax finished
vm.loading(false);
}
});
});
ko.applyBindings(vm);
});
これは、このノックアウトチュートリアルのフォルダと電子メールで発生するドリルダウンに似ています。