Oracle JET: Knockout not updating variable

拟墨画扇 提交于 2019-12-24 10:59:25

问题


I have the following oracle jet and knockout html file

<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>  

I have following snippet of JS file

       self.addTagsToBuild = function (data) {
            self.jobDetails(data);
                $('#addNewTag').ojDialog('open');}

So basically I am calling function addTagsToBuild on click of a button which should open a dialog box and I want initial value of input text box to be jobDetails().faReleaseVersion which I have declared in data-bind attribute.Unfotunately when I am running this code jobDetails() is being passed as null and so the initial value of input text with id=releaseVersion is null.What could be the issue? Any pointers?


回答1:


oj-input-text is (obviously) an input field and so it both reads and writes to an observable you bind it to.

But your code is not binding it to an observable. In fact, you shouldn't even use data-bind for OJET components, because they are already used internally. You have to use the custom properties of each component.


First, you need to create a separate observable for oj-input-text. Why? Because if it is not on observable then no change event will be fired to the HTML to indicate that the value of faReleaseVersion has been updated.

self.faReleaseVersion = ko.observable();
self.addTagsToBuild = function (data) {
        self.jobDetails(data);
        self.faReleaseVersion(data.faReleaseVersion);
        $('#addNewTag').ojDialog('open');}

Next, use the value property of oj-input-text to bind it to faReleaseVersion.

<oj-input-text id="releaseVersion" value="{{faReleaseVersion}}"></oj-input-text>

Here's the Cookbook link that shows how to use oj-input-text, and here's the documentation.




回答2:


Bind your variable to an observable then knockout starts observing

self.testVariable = ko.observable();


来源:https://stackoverflow.com/questions/52263051/oracle-jet-knockout-not-updating-variable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!