0

我可能会炫耀我缺乏这方面的技能。但既然我完全是为了学习,我愿意放下骄傲……

在我的 viewModel 中,我定义:

self.Tags() = ko.observableArray();
self.Skills() = ko.observableArray();

然后我想保存我的标签。我在 viewModel 之外创建了这个函数,我在其中进行了一些处理:

function saveTags( category, mytagsArray) { ... }

我从 viewModel 中调用 'saveTags("skill", Skills)' 并得到这个错误,告诉我 self.Tags() 不是函数。

为什么我不允许在函数“saveTags”中引用 self.Tags?

(请不要说它应该是 LackOfSkills 而不是 Skills ......;)

4

4 回答 4

2

尝试没有()的:

self.Tags = ko.observableArray();
self.Skills = ko.observableArray();

self.Tags = foo说将 self.Tags 设置为 foo。 self.Tags()说 self.Tags 在一个函数中,你想调用它。这些都是合法的陈述。但是self.Tags() = foo说 self.Tags 是一个你想要调用的函数,并将它的值设置为 foo... 这没有意义,也不是任何语言的有效代码。

于 2013-10-14T13:18:35.197 回答
1

这里的问题是您分配ko.observableArray();了 call 的结果self.Tags(),这就是为什么您的函数没有存储在self.Tags变量中的原因。我猜正确的代码应该是这样
的:如果你想分配调用的结果:

self.Tags = ko.observableArray();
self.Skills = ko.observableArray();

如果您想分配功能链接以便稍后调用它们:

self.Tags = ko.observableArray;
self.Skills = ko.observableArray;
...
// somewhere later
self.Tags();
于 2013-10-14T13:21:15.350 回答
1

您可以通过将视图模型存储在如下变量中来访问它:

function ViewModel() {
     self.Tags = ko.observableArray();
     self.Skills = ko.observableArray();
}
my = { viewModel: new ViewModel() };
ko.applyBindings(my.viewModel);

然后你只需访问my.Tags()

相关答案

于 2013-10-14T13:18:55.367 回答
1

这是给你的演示笔。尝试像这样定义您的视图模型:

var tagsViewModel = {
    // data
    tagToAdd: ko.observable(""), // this is the new tag to add
    tags: ko.observableArray([]), //empty collection
    skills: ko.observableArray([]),

// behaviors
    addTag: function () {
        var newTag = { Name: this.tagToAdd() };
        this.tagToAdd("");

        tagsViewModel.tags.push(newTag)

    }
};

ko.applyBindings(tagsViewModel);

像这样定义你的html:

<input type="text" placeholder="Add New Tag" data-bind="value: tagToAdd, valueUpdate: 'afterkeydown'" /> <button data-bind="click: addTag, enable: tagToAdd().length > 0" class="btn"><i class="icon-plus"></i> Add</button>

 <ul data-bind="foreach: tags" class="">
<!-- DEFINE UR LI HERE -->
</ul>
于 2013-10-14T13:27:55.310 回答