1

我是 knockoutjs 的新手,我有一个超级基本的问题要问你:

我已经能够成功订阅用户更改屏幕上的推特句柄并成功获取推文并使用显示用户最近的推文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);

  });

 }); 
};
4

2 回答 2

4

要访问可观察对象的实际值,无论它是否为数组,都需要包含括号。例如以下将起作用:

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")
于 2011-12-29T20:39:52.430 回答
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);
    });
}
于 2015-03-25T18:19:55.110 回答