2012-07-28 162 views
1

我試圖在Rails 3.2.6中實現knockout.js。我正在使用Gem https://github.com/jswanner/knockoutjs-railsRails資產管道+ knockout.js

我無法加載ViewModel。

這是我對調試

<div data-bind="text: ko.toJSON(users)"></div> 

HTML下面是從的CoffeeScript編譯JavaScript的。該文件是users.js.coffeeapplication.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); 

在加載包含在通過//= require_tree .資產管道,在div顯示此:[null,null,null]

奇怪的是,如果我實現了這一點的jsfiddle,似乎工作。看到這個:http://jsfiddle.net/netwire88/HXYHU/2/

想法,想法?

UPDATE:7/31/2012

我能夠通過改變功能刪除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() 
+0

把你的用戶對象和你的viewmodel放到你的application.js中。你不需要jquery調用東西來進行測試。淘汰賽運行沒有jQuery。 – glenn 2012-07-29 10:09:47

+0

謝謝丹尼爾,但這似乎沒有工作。有些東西導致綁定無法正常工作。 – Dean 2012-07-30 10:55:21

+0

其實@dean,如果你使用這整個東西,它不能在小提琴中工作。我不認爲這是一個淘汰賽問題,我認爲它是一個咖啡問題。 – Tyrsius 2012-07-30 21:34:10

回答

2

你應該注意到一個非常,非常發佈的代碼,並在小提琴的代碼之間的重要區別:您的viewmodels返回單個屬性,小提琴的viewmodels沒有任何回報。

您的代碼正在創建無效的viewmodels。如果你在小提琴中取消了這些回報,它將以完全相同的方式打破。你沒有發佈咖啡文字給我們看,但這絕對是問題。

壞視圖模型:

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() {}); 
    }; 

好視圖模型

User = function(id, name) { 
     var self; 
     self = this; 
     self.id = ko.observable(id); 
     self.name = ko.observable(name); 
    }; 

也是一樣的UserViewModel

+0

謝謝,我來看看。 CoffeeScript爲每個函數添加一個默認返回值,我應該只使用「@」來「返回」? – Dean 2012-07-31 11:51:21

+0

謝謝,擺脫「返回」工作。 – Dean 2012-07-31 12:18:47