初めて正常に動作するビューモデルがあります。これが私が持っているモデルです。
function MessageTViewModel() {
var self = this
self.SelectedUser = ko.observable()
self.ProfileId = ko.observable()
self.ExistingCommunication = ko.observableArray([])
self.NewCommunication = ko.observableArray([])
self.DeclinedCommunication = ko.observableArray([])
self.Messages = ko.observableArray([])
self.LoadData = function(){
self.InitializeData()
}
self.InitializeData = function(){
var url = 'Messaging/Index'
var type = 'GET'
ajax(url , null , self.OnInitializeDataComplete, type )
}
self.OnInitializeDataComplete = function(data){
var existingCommunication = getCommunication(conversation,'Existing')
self.ExistingCommunication(existingCommunication)
self.SetSelectedUser(existingCommunication[0])
}
self.SetSelectedUser = function(data){
self.SelectedUser(data.ProfileId)
self.InitializeUserData()
}
self.InitializeUserData = function(){
var data = {ids : self.SelectedUser()}
var url = 'Search/GetProfile'
var type = 'GET'
ajax(url , data , self.OnInitializeUserDataComplete, type )
}
self.OnInitializeUserDataComplete = function(data){
self.GetConversation()
}
self.GetConversation = function(){
var data = {/// blah blah ///}
var url = 'MessagingApi/Conversation'
var type = 'GET'
ajax(url , data , self.OnGetConversationComplete, type )
}
self.OnGetConversationComplete = function(data){
var messages = ko.mapping.fromJS(data.Messages)
self.Messages(messages())
self.AddClass()
}
self.AddClass = function(){
ko.utils.arrayForEach(self.Messages(),function(item){
item.LikedClass = ko.computed(function(){
var status = item.TargetUserAction()
return (status=='Liked') ? 'mlike_a' : 'mlike'
})
item.DislikedClass = ko.computed(function(){
var status = item.TargetUserAction()
return (status=='Disliked') ? 'mdlike_a' : 'mdlike'
})
item.FlagClass = ko.computed(function(){
var status = item.TargetUserAction()
return (status=='Flagged') ? 'flag_a' : 'flag'
})
})
}
self.ChangeUserChat = function(data){
self.SetSelectedUser(data)
}
self.LoadData()
}
$('document').ready(function () {
ko.applyBindings(new MessageTViewModel())
})
これから余分なコードを削除しました。
そして、これが生成されたビューです。
<article class="prfl_box">
<a data-bind="event:{click:$root.ChangeUserChat.bind($data)}">
<img class="right_navm" alt="">
</a>
<h3 data-bind="text:WithUsername">talha.akber23</h3>
</article>
<article class="prfl_box">
<a data-bind="event:{click:$root.ChangeUserChat.bind($data)}">
<img class="right_navm" alt="">
</a>
<h3 data-bind="text:WithUsername">raheelshan123</h3>
</article>
アンカー クリックでわかるように、私は ChangeUserChat を呼び出しています。そのため、他のセクションに表示しているユーザー情報を変更します。呼び出しのシーケンスは次のとおりです。
オンロードデータ
self.SetSelectedUser(existingCommunication[0])
self.InitializeUserData()
self.GetConversation()
self.AddClass()
および ChangeUserChat への呼び出し時
self.ChangeUserChat = function(data){
self.SetSelectedUser(data)
}
self.InitializeUserData()
self.GetConversation()
self.AddClass()
現在、Load では正常に動作する AddClass メソッドを呼び出していますが、ChangeUserChat では常にエラーが発生します。それは常に言いLikedClass is not defined
ます。AddClass メソッドを呼び出していないか、何らかの形で回避していると思います。この問題を解決するにはどうすればよいですか。AddClass の後に console.log を追加することを確認したところ、コンソールに結果が表示されました。
編集:
私のページには 2 つのセクションがあります。このような
今。デフォルトでは、最初のアイテムが割り当てられself.SetSelectedUser(existingCommunication[0])
、ページの右側すべてに必要なすべての情報が入力され、各メッセージにさらに 3 つのプロパティが追加されます。を参照してくださいself.Messages()
。次は私のバインディングです
<ul>
<li id="chat-time-ago"></li>
<li>
<img src="../images/spacer.gif" data-bind="attr:{class:LikedClass()}">
</li>
<li>
<img src="../images/spacer.gif" data-bind="attr:{class:DislikedClass()}">
</li>
<li>
<img src="../images/spacer.gif" data-bind="attr:{class:FlagClass()}">
</li>
</ul>
初めて問題なく動作しますが、項目 2 をクリックして呼び出すself.ChangeUserChat
と、 と表示されますLikes Class is not defined
。