1

Rails3.2.6にknockout.jsを実装しようとしています。私はGemhttps://github.com/jswanner/knockoutjs-railsを使用しています

ViewModelの読み込みに問題があります。

これがデバッグ用の私のHTMLです

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

これがCoffeeScriptからコンパイルされたJavaScriptです。このファイルは、を介してusers.js.coffeeアセットパイプラインに含まれています。//= require_tree .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()
4

1 に答える 1

2

投稿したコードとフィドルのコードの非常に重要な違いに気付くはずです。ビューモデルは単一のプロパティを返しますが、フィドルのビューモデルは戻りません。

コードが無効なビューモデルを作成しています。フィドルでこれらのリターンのコメントを外すと、まったく同じように壊れます。あなたは私たちが見るためにコーヒースクリプトを投稿しませんでしたが、これは間違いなく問題です。

悪いビューモデル:

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

于 2012-07-30T22:07:02.410 に答える