我是这个淘汰赛js和MVVM架构的新手。无法在按钮点击事件中检索动态创建的文本框值。
代码:HTML
<div data-bind="foreach: cources">
<input type="text" data-bind="value: textValue"/>
<br>
</div>
<input type="button" data-bind="click:retrieve" value="Value"/>
代码:JS
function CourseViewModel(){
textValue = ko.observable('');
}
var ViewModel= {
cources : ko.observableArray([new CourseViewModel()]),
retrieve: function()
{
var abc = $.parseJSON(ko.toJSON({ textValue: ViewModel.cources}));
alert(abc.textValue());
}
}
ko.applyBindings(ViewModel);
答案 0 :(得分:0)
可能存在一些不同的问题:
ViewModel
上调用的函数中引用ViewModel
,你可以使用例如下面的模式。abc
有一个名为textValue
的功能,但是在您离开JSON之后就是这样。 JSON不会保留这样的功能。textValue
。你需要导出它,例如使用self
成语。见下面的例子。cources
更改为cources()
:它是一个observableArray并且要检索它的值,您需要执行 observable。< / LI>
var CourseViewModel = function() {
var self = this;
self.textValue = ko.observable('initial value');
};
var ViewModel = function() {
var self = this;
self.cources = ko.observableArray([new CourseViewModel()]);
self.retrieve = function() {
var abc = ko.toJSON({ textValue: self.cources() });
alert(abc);
}
};
ko.applyBindings(new ViewModel());
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div data-bind="foreach: cources">
<input type="text" data-bind="value: textValue"/>
</div>
<input type="button" data-bind="click:retrieve" value="Value"/>
&#13;
如果您坚持远离ViewModel的构造函数,您仍然可以执行此操作,但在实例化后,您必须使用ViewModel
修改 retrieve
包含您想要使用的所有属性。像这样:
var CourseViewModel = function() {
var self = this;
self.textValue = ko.observable('initial value');
};
var viewModel = {
cources: ko.observableArray([new CourseViewModel()])
};
viewModel.retrieve = function() {
var abc = ko.toJSON({ textValue: viewModel.cources() });
alert(abc);
};
ko.applyBindings(viewModel);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div data-bind="foreach: cources">
<input type="text" data-bind="value: textValue"/>
</div>
<input type="button" data-bind="click:retrieve" value="Value"/>
&#13;
你应该经历the Knockout tutorials。它不应该花很长时间,并且会很快为你节省很多时间来解决这类问题。
答案 1 :(得分:0)
在你的代码中,一切都很好,而不是你与当前对象的绑定。你需要用this
绑定你的数据和函数,
function CourseViewModel() {
this.textValue = ko.observable('');
}
var ViewModel = function(){
this.cources= ko.observableArray([new CourseViewModel()]);
this.retrieve= function () {
var abc = ko.toJSON({
textValue: this.cources
});
alert(abc);
}
}
ko.applyBindings(new ViewModel());
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div data-bind="foreach: cources">
<input type="text" data-bind="value: textValue" />
<br/>
</div>
<input type="button" data-bind="click:retrieve" value="Value" />
&#13;