无法分析Knockout.js中的绑定

无法分析Knockout.js中的绑定,knockout.js,Knockout.js,面对共同的“约束问题”。下面是viewmodel function DetailListViewModel() { this.details = new Details(); this.productdetails = ko.observableArray([]); this.show = function (item) { $.getJSON("Products.json", {}, function (data) {

面对共同的“约束问题”。下面是viewmodel

    function DetailListViewModel() {

    this.details = new Details();
    this.productdetails = ko.observableArray([]);

    this.show = function (item) {
        $.getJSON("Products.json", {}, function (data) {
            this.productdetails.push(this.details.init(data));
        });
    };
    }

    function Details() {
    this.author = ko.observable();
    this.text = ko.observable();
    this.init = function (temp) {
        return {
            author: temp.Author,
            text: temp.Text
        };
    };
    }

    var TaskListViewModel = {    
    tasks: ko.observableArray([]),
    addTask: function () {
    self.tasks.push(new Task({ BomID: this.BomID() }, { CreatedBy: this.CreatedBy() }));
    },
    ShowProductInfo: function (item) {       
        DetailListViewModel.show(item);
    }
    };


    $(function () {    
    $.getJSON("Tasks.json", function (allData)       {
            TaskListViewModel.tasks.push(toKoObserable($.parseJSON(allData.GetDataResult).RESULT.DOCUMENT));
        ko.applyBindings(TaskListViewModel);
        var DetailListViewModel = new DetailListViewModel();
        ko.applyBindings(DetailListViewModel);
    });

    function toKoObserable(blog) {
        return {
            BomID: ko.observable(blog[0].BOMID),
            CreatedBy: ko.observable(blog[0].CreatedBy)
        };
    }
});
我得到了这个错误

Uncaught Error: Unable to parse bindings.
Message: ReferenceError: author is not defined;
Bindings value: text:author 
我的HTML是:

<h3  data-bind="text:author">/h3>
/h3>

我非常确定,如果您更改了详细信息,那么一切都会按照您的预期工作。我不知道为什么您的详细信息列表包含单个详细信息实例,然后您使用该对象创建一个可观察的详细信息数组。从设计的角度来看,这似乎是不对的。此外,init不会返回可观察的值。尝试按照以下方式进行更改:

function Details(author, text) {
    this.author = ko.observable(author);
    this.text = ko.observable(text);
}
然后,当您填充详细信息列表时,您将执行以下操作:

function DetailListViewModel() {
    this.productdetails = ko.observableArray([]);

    this.show = function (item) {
        $.getJSON("Products.json", {}, function (data) {
            this.productdetails.push(new Details(data.Author, data.Text));
        });
    };
}

Try,this.author=ko.observable(“”);this.text=ko.可观察(“”);两次应用绑定不是一个好主意。。。你到底想做什么?什么是html结构?提供一个目标元素以将绑定应用于页面的不同部分,或者将视图模型合并为一个并将其应用于页面。您好,谢谢您的评论,但我保留单独视图的单独视图模型,我想参考其他视图模型功能。最初,我将DetailListViewModel保存在单独的js文件中,但它不起作用,所以我考虑将其移动到单个文件中,以查看绑定是否正常工作

Hi-Konstantin…谢谢…我做了更改,但仍然收到相同的错误。我在Chrome控制台调试期间看到的是ko.applyBindings(DetailListViewModel);从未被调用…现在修改了代码ko.applyBindings(DetailListViewModel)正在被调用,但仍然是相同的错误…这个问题让我发疯了…你需要实例化一个新的DataListViewModel并调用该模型上的apply绑定。所以你的意思是说它应该是var TaskListViewModel={tasks:ko.observeArray([]),addTask:function(){self.tasks.push(新任务({BomID:this.BomID()},{CreatedBy:this.CreatedBy()}));},ShowProductInfo:function(item){var DetailListViewModel=new DetailListViewModel();DetailListViewModel.show(item);ko.applyBindings(DetailListViewModel);};