是否可以记录KO可观察数组?

时间:2011-12-29 20:30:16

标签: javascript logging knockout.js subscribe ko.observablearray

我是淘汰赛的新手,我有一个超级基本的问题:

我已经能够成功订阅用户更改屏幕上的Twitter句柄并成功获取推文并使用console.log(json.results[0].text);显示用户最近发布的最新推文但是我不确定我的可观察数组是否正常工作,当我将json.results推送到最近的推文中时:recent_tweets.push(json.results[0].text)我看到一个[]空数组。

发生了什么事?是否可以记录ko.observable数组?

console.log("TwitterFeedComponent loaded")
TwitterFeedComponent = function(attributes) {
  if (arguments[0] === inheriting)
    return;

  console.log("TwitterFeedComponent() loaded")

  var component = this;  
  var url = 'https://twitter.com/search.json?callback=?';

  this.attributes.twitter_user_handle.subscribe(function(value) {
  alert("the new value of the twitter handle is " + value);
  console.log("I have loaded")

    var url = 'https://twitter.com/search.json?callback=?';
    var twitter_parameters = {
      include_entities: true,
      include_rts: true,
      q: 'from:' + value,   
      count: '3'
    }

  $.getJSON(url,twitter_parameters, 
  function(json) {
      result = json.results[0].text
      recent_tweets.push(json.results[0].text);
      console.log(recent_tweets);
      console.log(json.results[0].text);

  });

 }); 
};

2 个答案:

答案 0 :(得分:4)

要访问observable的实际值,无论它是否为数组,都需要包括括号。例如,以下内容将起作用:

var recent_tweets= ko.observableArray(["hello", "hi", "how are you"]);
console.log(recent_tweets());

分配变量时也是如此。

以下是常规标量值的示例:

var myObservableName = ko.observable("Luis");
myObservableName("Dany"); // changes the name to: Dany
var Name = myObservableName(); // gets the value and assigns it to the variable Name (in    this case the value is "Dany")

答案 1 :(得分:1)

为了回答这个问题,您可以随时使用Knockout的subscribe()功能。假设您有以下视图模型:

App.MyViewModel = function() {
    var self = this; 

    self.TestProperty = ko.observable(null);
}

为了演示,我们假设此属性绑定到文本字段,如下所示:

<input type="text" id="TestPropertyField" data-bind="textInput: TestProperty" />

现在让我们假设您希望在此值发生变化时记录。要执行此操作,只需按以下步骤更新视图模型:

App.MyViewModel = function() {
    var self = this; 

    self.TestProperty = ko.observable(null);
    self.TestProperty.subscribe(function(newValue){
        console.log("The new value is: " + newValue);
    });
}