1

私はWebアプリを構築しており、KnockoutJSを使用するようにUIを変換しようとしています。私はノックアウトの完全な初心者ですので、親切にしてください!

通常、私は(PHPを使用して)従業員リストをロードし、従業員が選択されている場合は、JQueryを使用してその従業員のIDを見つけ、バックエンドに対してAJAX呼び出しを行い、結果ボックスに入力して下にスライドします。

Knockoutでこの動作を再現する方法はありますか?

4

2 に答える 2

1

開始するための定型文は、jQueryとKnockoutを使用します。

http://jsfiddle.net/5BHrc/6/

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);
});
于 2014-04-02T11:09:40.307 に答える
0

これは、このノックアウトチュートリアルのフォルダと電子メールで発生するドリルダウンに似ています。

于 2014-04-01T21:46:38.390 に答える