【问题标题】:Knockout bind data to text box on button click敲除将数据绑定到按钮单击的文本框
【发布时间】:2018-02-01 15:18:07
【问题描述】:

我是 Knockout 的新手。我正在尝试获取文本框的值,单击按钮并使用 REST,从 SharePoint 获取一些数据并将其更新到另一个文本框,我能够获取数据但无法将其绑定到文本框。请帮忙。我只是想在名字文本框中显示帐户名称

到目前为止,这是我的代码:

    <script type="text/javascript" src="/sites/crdrdev/SiteAssets/JS/Knockout/knockout-min.js"></script>
    <script type="text/javascript" src="/sites/crdrdev/SiteAssets/JS/JQuery/jquery-1.12.4.min.js"></script>
    <script type="text/javascript" src="/sites/crdrdev/SiteAssets/JS/Request%20Controller/RequestController.js"></script>
    <script type="text/javascript" src="/sites/crdrdev/SiteAssets/JS/Main/test.js"></script>
    <div id="custom-new-form">
       <fieldset>
         <legend>Sales Return Approval</legend>
           <div class="left-panel">
             <div class="form-field">
               <div class="field-label">
                 <span>ID:</span>
                    <span class="ms-formvalidation" title="This is a required field."> *</span>
               </div>
             <div class="field-value">
                <input class="single-text-input" type="text" data-bind="textInput: newISID().ISID" id="ISID"/>
                <br/>
                <!--<div class="ms-formvalidation validation-message" data-bind="visible: ISIDValidator">
                    <span role="alert">You must specify a value for this required field.</span>
                </div>-->
            </div>
        </div>
        <input type="button" id="btnGetUserProperties" value="Go!" data-bind="click: getUserProperties">
        <div class="form-field">
            <div class="field-label">
                <span>First Name:</span>
                <span class="ms-formvalidation" title="This is a required field."> *</span>
            </div>
            <div class="field-value">
                <input class="single-text-input" type="text" data-bind="value:firstName"/>
                <br/>
                <!--<div class="ms-formvalidation validation-message" data-bind="visible: fstNameValidator">
                    <span role="alert">You must specify a value for this required field.</span>
                </div>-->
            </div>
        </div>
    </div>
</fieldset>
</div>

 function getISID()
 {
    var self=this;
    self.isid=ko.observable();
 }
 function item(data)
 {
    var self=this;
    alert(data);
    var viewModel={firstName:ko.observable(data.d.AccountName)};
 }

 function userViewModel() {
    var self = this;
    self.newISID= ko.observable(new getISID());
    self.getUserProperties = function () {
    var koisid=ko.toJSON(self.newISID());
    var splitisid=koisid.split(':"')[1];
    var isid=splitisid.replace('"}','')

    var oisid=isid + '@.com';
    var fullisid='i:0%23.f|membership|' + oisid;
    var url="/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v="+"'"+fullisid+"'";
    alert(url);
    $.ajax({
            url: someurl,
            method: "GET",
            async: false,
            headers: { "Accept": "application/json; odata=verbose" },
            success: function (data) {
                if(data.d.Email=="undefined" || data.d.Email==undefined)
                {
                    alert("Enter correct ISID");
                }
                else
                {                       
                    return new item(data);
                }                   
            },
            failure: function(){
                alert("please enter correct ISID")
            }
    });
}   
}
$(document).ready(function () {
   ko.applyBindings(new userViewModel());
});

【问题讨论】:

    标签: jquery knockout.js


    【解决方案1】:

    您的ajax 调用会返回一个新的item,但这永远不会发生。为了能够执行data-bind="value:firstName",您需要在您的视图模型中有一个firstName 成员:

    self.firstName = ko.observable();
    

    然后在你的 ajax 调用中,分配它:

    self.firstName(data.d.AccountName);
    

    您可以创建一个item 成员并在您的视图中绑定item.firstName,但我看不出这里有任何额外层的原因。

    【讨论】:

    猜你喜欢
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 2017-02-09
    相关资源
    最近更新 更多