2014-10-04 164 views
0

我正在使用knockout来创建一个commentfield,我已经从使用几个viewmodels改变为一个父viewmodel,因为我在使用foreach时遇到了一些冲突。我的新问题是从我的父ViewModel运行一个函数。我的评论()函数的工作原理,但我有问题调用javascript内的commentSection()。访问ViewModel函数

我想从函数commentSection调用getNewEntries。我认为这样做的方式是用vm.cSection.getNewEntries调用我的Viewmodel(vm),但控制台说它不是一个函数。所以我的问题是,我怎么能通过vm调用这个函数getNewEntries?

下面是它的外观:

function Comment() { 
    var self = this; 

    self.nickname = ko.observable(); 
    self.newMsg = ko.observable(""); 

    self.sendEntry = function() { 

     if (self.newMsg() !== "" && self.nickname() !== "") { 

      $.post(writeUrl, "entry=" + ko.toJSON(self)); 
      self.newMsg(""); 
     } 
    }; 
} 
function commentSection() { 
    var self = this; 
    self.timestamp = 0; 
    self.comments = ko.observableArray(); 
    self.editable = ko.observable(false); 

    self.deleteComment = function() { 
     vm.cSection.comments.remove(self); 
    }; 

    self.editComment = function() { 
     self.editable(!self.editable()); 
    }; 
    self.getNewEntries = function() { 
     $.getJSON(readUrl, "timestamp=" + self.timestamp, function(comments) { 
      for (var i = 0; i < comments.length; i++) { 
       var entry = comments[i]; 
       if (entry.timestamp > self.timestamp) { 
        self.timestamp = entry.timestamp; 
       } 
       self.comments.unshift(entry); 
      } 
      self.getNewEntries(); 
     }); 

    }; 

} 

function ViewModel() { 
    var self = this; 

    self.cSection = ko.observable(new commentSection()); 
    self.comments = ko.observableArray(); 
    self.selectedComment = ko.observable(new Comment()); 

    //self.cSection.getNewEntries(); 
} 
var vm = new ViewModel(); 
ko.applyBindings(vm); 
vm.cSection.getNewEntries(); 

});

如果我的问题不清楚,告诉我。提前致谢!

回答

0

cSection是可观察到的,你必须解开它来获得commentSection实例:

vm.cSection().getNewEntries(); 

deleteComment功能同样的事情:

self.deleteComment = function() { 
    vm.cSection().comments.remove(self); 
}; 
+0

啊所以它是那么简单。菜鸟错误!非常感谢。 :) – 2014-10-04 11:04:17