Можно ли записать наблюдаемый массив КО? - PullRequest
1 голос
/ 30 декабря 2011

Я новичок в 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);

  });

 }); 
};

Ответы [ 2 ]

4 голосов
/ 30 декабря 2011

Чтобы получить доступ к фактическим значениям наблюдаемой, будь то массив или нет, вам нужно включить круглые скобки.Например, будет работать следующее:

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 голос
/ 25 марта 2015

Чтобы ответить на этот вопрос немного по-другому, вы всегда можете использовать функцию 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);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...