1

私はKnockoutjsが初めてです。監視可能なユーザーの配列があります。ここに私のユーザーモデルがあります:

function User(data) {
        this.NameID = ko.observable(data.NameID);
        this.UserID = ko.observable(data.UserID);
        this.InTime = ko.observable(data.InTime);
        this.OutTime = ko.observable(data.OutTime);
        this.Notes = ko.observable(data.Notes);
        this.StatusID = ko.observable(data.StatusID);
        this.Status = ko.observable(data.Status);
        this.InOut = ko.observable(data.InOut);
        this.Name = ko.observable(data.Name);
        return this;
    }

次に、ビュー モデルでユーザーの配列を作成します。ビューで foreach を実行してテーブル内のすべてのユーザーを表示するのは簡単ですが、現在のユーザーが自分の変数を変更できるようにフォームを作成したいと考えています。セッション変数を使用して UserID を設定しています。次に、ko.utils.arrayFirstを使用して、配列から現​​在のユーザーを見つけます。私はここで意味をなしていないように感じます。ユーザーにアクセスするためのフォームを作成する方法はありますか? 以下のように:

function UserViewModel() {
        var self = this;
        self.users = ko.observableArray([]);
        self.statuses = ko.observableArray([]);
        self.currentUser = ko.utils.arrayFirst(self.users(), function (user) {
                return user.UserID() == @HttpContext.Current.Session["UserID"];
        });
}

次に、私の見解では、次のようなフォームを作成します(私はtwitter-bootstrapを使用しています):

       <form class="well form-horizontal">    
        <div class="control-group">
            <label class="control-label" for="Statuses">
                Status</label>
            <div class="controls">
                <select id="Statuses" data-bind="options: statuses, optionsValue: 'StatusID', optionsText: 'Stat', value: currentUser.StatusID">
                </select>
            </div>
        </div>
        <div class="control-group">
            <label class="control-label" for="InTime">
                In:</label>
            <div class="controls">
                <input id="InTime" data-bind="value: currentUser.InTime" class="span1" />
            </div>
        </div>
        <div class="control-group">
            <label class="control-label" for="OutTime">
                Out:</label>
            <div class="controls">
                <input id="OutTime" data-bind="value: currentUser.OutTime" class="span1" />
            </div>
        </div>
        <div class="control-group">
            <label class="control-label" for="Notes">
                Notes</label>
            <div class="controls">
                <textarea id="Notes" data-bind="value: currentUser.Notes" /></textarea>
                 <p><span style="text-align:center;"><a id="chg" class="btn btn-primary" >Update</a></span></p>
            </div>
        </div>   
       </form>

意味がわからない場合、または問題を解決するためにさらに情報が必要な場合は、コメントしてください。ありがとう!!

4

1 に答える 1

4

どのようなエラーが発生していますか? currentUser プロパティがコンストラクターで設定されるように見えますが、配列はまだ空のように見えますが、ユーザーがどこに配置されているかを示していないだけかもしれません。もう1つは、一度設定するだけで、ユーザーIDのオブザーバブルを作成し、計算されたユーザーを使用して一致するユーザーを見つけることができ、後でIDを変更するか、ユーザーを設定した後に簡単にユーザーを変更できます。

self.currentUserId = ko.observable(@HttpContext.Current.Session["UserID"]);
self.currentUser = ko.computed(function() {
    return ko.utils.arrayFirst(self.users(), function (user) {
            return user.UserID() == self.currentUserId();
    });
});

次に、配列または currentUserId オブザーバブルを更新するときに、currentUser を正しく設定する必要があります。ユーザーがオブザーバブルの場合は、それを関数として呼び出す、フォームで with バインディングを使用する必要があります。

<input id="InTime" data-bind="value: currentUser().InTime" class="span1" />

<form data-bind="with: currentUser">
<input id="InTime" data-bind="value: InTime" class="span1" />
于 2012-06-12T20:24:18.623 に答える