2013-07-23 2 views
0

im пытается получить видеопотоки с youtube через функцию поиска. Я нажимаю данные в наблюдаемом файле, но BINDING всегда терпит неудачу.knockoutjs bindind observablearray doent work

у меня есть этот ViewModel так:

var videoFeeds = ko.observableArray(); 
var vm = { 
    videoFeeds: videoFeeds, 
    search: search 
}; 
function search(value) { 
    value = value.toLowerCase().replace(/\s+/g, '+'); 

    var options = { 
     url: 'https://gdata.youtube.com/feeds/api/videos/?q=' + value + '&max-results=10&alt=json&v=2', 
     method: 'GET', 
     dataType: 'jsonp' 
    }; 

    $.ajax(options) 
     .done(function (data) { 
      videoFeeds([]); 
      for (var k in data.feed.entry) 
      { 
       var videoFeed = { 
        title : data.feed.entry[k].media$group.media$title.$t, 
        id : data.feed.entry[k].media$group.yt$videoid.$t, 
        author: data.feed.entry[k].author[0].name.$t 
       }; 

       videoFeeds().push(videoFeed); 
      } 
      for (var k in videoFeeds()) 
      { 
       console.log('title : ' + videoFeeds()[k].title); 
      } 
     }) 
     .fail(function (err) { 
      console.log(err); 
     }); 
} 

вид s так:

<ul data-bind="foreach: videoFeeds"> 
    <li data-bind="text: title"></li> 
</ul> 

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

Благодарим за помощь.

ответ

0

Вместо того, чтобы звонить videoFeeds().push(videoFeed), попробуйте обновить каталог свойств моделей, указав vm.videoFeeds.push(videoFeed).

При создании модели просмотра вы предпочитаете массив videoFeeds, однако, как только вы начинаете добавлять элементы, вы должны работать только с массивом View Models.

Для удобства чтения, что может быть лучше, чтобы объявить ViewModel как это:

var vm = { 
    videoFeeds: ko.observableArray(), 
    search: search 
}; 

и избавившись от первоначального определения массива все вместе.

+0

Вы правы 'videoFeeds(). Push (videoFeed)' была проблемой, спасибо большое за помощь. о читаемости я согласен с вами, это, вероятно, лучший способ сделать это. – dafriskymonkey

+0

Добро пожаловать. Если это решит вашу проблему, отметьте как ответ. Благодаря! –

Смежные вопросы