我正在尝试在 Rails 3.2.6 中实现 knockout.js。我正在使用宝石https://github.com/jswanner/knockoutjs-rails。
我在加载 ViewModel 时遇到问题。
这是我用于调试的 HTML
<div data-bind="text: ko.toJSON(users)"></div>
这是从 CoffeeScript 编译的 JavaScript。该文件users.js.coffee
通过//= require_tree .
in包含在资产管道中application.js
(function() {
jQuery(function() {
var User, UserViewModel;
User = function(id, name) {
var self;
self = this;
self.id = ko.observable(id);
self.name = ko.observable(name);
return self.followers_count_message = ko.computed(function() {});
};
UserViewModel = function() {
var self;
self = this;
self.users = ko.observableArray([new User('1111', 'test name'), new User('1112', 'test name2')]);
self.addUsers = function() {
return self.users.push(new User('1113', 'test name'));
};
return self.addUsers();
};
ko.applyBindings(new UserViewModel());
return alert('done');
});
}).call(this);
加载后,div 显示如下:[null,null,null]
奇怪的是,如果我在 jsFiddle 中实现它,它似乎可以工作。看到这个:http: //jsfiddle.net/netwire88/HXYHU/2/
想法,想法?
更新:2012 年 7 月 31 日
我可以通过更改函数来删除return
. 但是,我想将其移至另一个 CoffeeScript 文件。
我试过这个users.js.coffee
,但是,我得到了错误Uncaught TypeError: Cannot read property 'nodeType' of null
User = (id, name) ->
self = undefined
self = this
self.id = ko.observable(id)
self.name = ko.observable(name)
@
UserViewModel = ->
self = this
self.users = ko.observableArray([new User("1111", "test name"), new User("1112", "test name2")])
self.addUsers = ->
self.users.push new User("1113", "test name")
self.addUsers()
@
ko.applyBindings new UserViewModel()