我可能会用这个来炫耀我缺乏技巧。但既然我都是为了学习而愿意让自己感到骄傲......
在我的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 ......;)
答案 0 :(得分:2)
尝试没有()' s:
self.Tags = ko.observableArray();
self.Skills = ko.observableArray();
self.Tags = foo
说要设置自我。标记为foo。 self.Tags()
说self.Tags在一个函数中,你想调用它。这些都是合法的陈述。但self.Tags() = foo
表示self.Tags是一个你想要调用的函数,并将其设置为foo ...它没有任何意义,并且不是任何语言的有效代码。
答案 1 :(得分:1)
您可以通过将视图模型存储在如下变量中来访问您的视图模型:
function ViewModel() {
self.Tags = ko.observableArray();
self.Skills = ko.observableArray();
}
my = { viewModel: new ViewModel() };
ko.applyBindings(my.viewModel);
然后您只需访问my.Tags()
答案 2 :(得分:1)
此处的问题是您为调用ko.observableArray();
的结果分配了self.Tags()
,这就是您的函数未存储在self.Tags
变量中的原因。我想正确的代码看起来像:
如果你想要分配那些电话的结果:
self.Tags = ko.observableArray();
self.Skills = ko.observableArray();
如果您想要指定函数链接以便稍后调用它们:
self.Tags = ko.observableArray;
self.Skills = ko.observableArray;
...
// somewhere later
self.Tags();
答案 3 :(得分:1)
Here is a demo pen for you。尝试定义您的视图模型:
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>