如何使用knockout.js点击一个元素到另一个元素的数据

时间:2014-01-08 14:37:21

标签: javascript html data-binding mvvm knockout.js

我想用一个弹出窗口填充被点击的元素的数据。例如,我有一个用户名单,位置等的列表。然后,当我点击“查看更多”时,弹出窗口显示列表项中的相同用户数据。 目前,弹出窗口中没有任何内容。

请在此处查看示例:http://jsfiddle.net/46LJ9/

JS / KO

//should be a json from server
var users = [
  {
    "name": "Yoshi",
    "surname": "Kawasaki",
    "position": "Developer"
  },
  {
    "name": "Miu",
    "surname": "Furinji",
    "position": "Martial Artist"
  },
  {
    "name": "Shigure",
    "surname": "Kosaka",
    "position": "Martial Artist Master"
  },
  {
    "name": "Ore",
    "surname": "Ore Ga",
    "position": "Martial Artist and Developer"
  }
  ];

  (function($, ko, window) {

    var UserModel = {

    name: ko.observable(''),
    surname: ko.observable(''),
    position: ko.observable(''),

    users: ko.observableArray(users),

    userDetails: ko.observable({}),

    showOverlay: function(o) {

        UserModel.userDetails(o);

        $('.overlay, .overlay-bg').fadeIn(400, function() {
            $(this).removeClass('hide').addClass('show');
        });
    },

    closeOverlay: function(o, e) {
        $('.overlay, .overlay-bg').fadeOut(400, function() {

            var $this = $(this);

            $this
                .removeClass('show')
                .addClass('hide')
                .removeAttr('style');
        });
    }

  };

  ko.applyBindings(UserModel);

}(jQuery, ko, window));

1 个答案:

答案 0 :(得分:1)

在你的JS中,你正在更新UserModel.userDetails(o);,但你的html绑定到name等。

<h1><span class="name" data-bind="text: name"></span></h1>

将绑定更改为data-bind="text: userDetails().name",它将起作用。

或者更新你的名字,姓氏和位置可观察物。

请参阅:http://jsfiddle.net/46LJ9/1/

修改

显然使用with绑定比上面更有意义:

<div class="overlay hide" data-bind="with: userDetails">

见到这里:http://jsfiddle.net/46LJ9/3/