我有以下oracle jet和knockout html文件
<oj-dialog style="display:none;width: 600px;" id="addNewTag" title='Tag New Build' cancel-behavior='icon'>
<div slot="body">
<div class="oj-form-layout">
<div class="oj-form oj-sm-odd-cols-12 oj-md-odd-cols-4 oj-md-labels-inline oj-form-cols-labels-inline oj-form-cols-max2">
<div class="oj-flex">
<div class="oj-flex-item">
<oj-label for="releaseVersion">Release Version</oj-label>
</div>
<div class="oj-flex-item">
<oj-input-text id="releaseVersion" data-bind="attr: {value: jobDetails().faReleaseVersion}"></oj-input-text>
</div>
我有以下JS文件片段
self.addTagsToBuild = function (data) {
self.jobDetails(data);
$('#addNewTag').ojDialog('open');}
所以基本上我在点击按钮时调用函数addTagsToBuild,它应该打开一个对话框,我希望输入文本框的初始值为jobDetails()。faReleaseVersion,我在data-bind属性中声明了。不幸的是,当我运行这个时代码jobDetails()被传递为null,因此id = releaseVersion的输入文本的初始值为null。可能是什么问题?有什么指针吗?
oj-input-text
(显然)是一个输入字段,因此它可以读取和写入一个可以将它绑定到的observable。
但是你的代码没有将它绑定到一个observable。实际上,您甚至不应该将data-bind
用于OJET组件,因为它们已经在内部使用。您必须使用每个组件的自定义属性。
首先,您需要为oj-input-text
创建一个单独的observable。为什么?因为如果它不在observable上,那么将不会向HTML触发任何更改事件以指示faReleaseVersion
的值已更新。
self.faReleaseVersion = ko.observable();
self.addTagsToBuild = function (data) {
self.jobDetails(data);
self.faReleaseVersion(data.faReleaseVersion);
$('#addNewTag').ojDialog('open');}
接下来,使用value
的oj-input-text
属性将其绑定到faReleaseVersion
。
<oj-input-text id="releaseVersion" value="{{faReleaseVersion}}"></oj-input-text>
这是Cookbook链接,显示如何使用oj-input-text
,这里是documentation。
将你的变量绑定到一个observable然后敲门开始观察
self.testVariable = ko.observable();