淘汰搜索问题对象#<object>的属性'model'不是函数</object>

时间:2014-03-05 14:43:35

标签: durandal

我怎样才能让它发挥作用?

define(['plugins/router', 'knockout', 'services/logger', 'durandal/app', 'mapping', 'services/routeconfig', 'services/dataBindingHandlers'], function (router, ko, logger, app, mapping, routeconfig, dataBindingHandlers) {

    //#region Internal Methods
    function activate() {
        logger.log('Übersicht View Activated', null, 'newSearch', true);
        return true;
    }
    //#endregion
    //==jquery=================================================
    function attached() {

    }//-->end of attached() 


    var url = "https://www.googleapis.com/books/v1/volumes?q=the+Cat+In+The+Hat", path = $.getJSON(url);


    path.then(function (data) {
        console.log(data.items);
        var viewModel = {
            title: 'Overview',
            query: ko.observable('')
        };
        viewModel.activate = activate();
        viewModel.attached = attached();
        viewModel.model = mapping.fromJS(data.items, {}, viewModel);
        /*understanding ko.mapping.fromJS signature:knockoutjs.com/documentation/plugins-mapping.html
        ko.mapping.fromJS(data) - this syntax will create view model.
        ko.mapping.fromJS(data, mappingOptions) - this will create view model with particular options.
        ko.mapping.fromJS(data, mappingOptions, viewModel) -
        ko.mapping.fromJS(data, viewModel) -
        ko.mapping.fromJS(data, {}, viewModel) - and this one convers your data without mapping options and put it to view model.
        */
        viewModel.filteredItems = ko.computed(function () {
            var search = this.query().toLowerCase();
                alert("i'am here in viewModel.books computed");
                console.log(viewModel.model);
                return ko.utils.arrayFilter(this.model(), function (book) {
                    return book.id().toLowerCase().indexOf(search) >= 0 || book.kind().toLowerCase().indexOf(search) >= 0 || book.etag().toLowerCase().indexOf(search) >= 0
                });

        }, viewModel);
        return viewModel;
    });

});

Utility Functions in KnockoutJS

更新:我在console.log(viewModel.model);

时收到了一个对象循环

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

你还没有明确说明什么是不起作用的?

但是,您可能需要将activate和attach方法添加到viewModel中,以便durandal调用它们。

viewModel.activate = activate;
viewModel.attached = attached;

你可能还打算在activate函数中调用这块代码,而不是在define调用中调用:

var url = "https://www.googleapis.com/books/v1/volumes?q=the+Cat+In+The+Hat",path =$.getJSON(url);

path.then( function (data) {
var books = data.items;
    console.log(books);