2012-02-28 23 views
6

के साथ सिग्नलर को प्रत्यारोपित करने का प्रयास कर रहा है मेरे पास निम्न कोड है और ऐसा लगता है कि यह क्लाइंट को कॉल नहीं कर रहा है और जानकारी के साथ नॉकऑटजेएस व्यूमोडेल को अपडेट नहीं कर रहा है। GetOuting() को पेज लोड पर कॉल किया जाता है और सही जानकारी को व्यूमोडेल में खिलाया जाता है। क्रोम डेवलपर टूल में कोई जेएस त्रुटियां नहीं दिखाता है। उस बिंदु से आगे मुझे परेशानी हो रही है कि यह समस्या निवारण कैसे करें। किसी भी मदद की सराहना की है। SignalR हबनॉकआउट व्यूमोडेल

public class Outings : Hub 
{ 
    private static Dictionary<Guid, OutingViewModel> outings = new Dictionary<Guid, OutingViewModel>(); 

    public void GetOuting(string id) 
    { 
     var guidID = new Guid(id); 
     bool containsOuting = outings.ContainsKey(guidID); 
     if (!containsOuting) 
     { 
      var outingAccessor = new OutingAccessor(); 
      outingAccessor.ID = guidID; 
      outingAccessor.Load(); 
      var outingVM = new OutingViewModel(outingAccessor); 
      outings.Add(guidID, outingVM); 
     } 
     var outing = outings[guidID]; 
     this.Clients.updateOuting(outing); 
    } 

    public void SaveOuting(string outingNumber, OutingViewModel outing) 
    { 
     var guidID = new Guid(outingNumber); 
     outings[guidID] = outing; 
     this.Clients.updateOuting(outing); 
    } 
} 

ViewModel

public class OutingViewModel 
{ 
    public OutingViewModel(OutingAccessor outingAccessor) 
    { 
     ID = outingAccessor.ID; 
     OutingNumber = outingAccessor.OutingNumber; 
     var outingGeneralAccessor = new OutingGeneralAccessor(); 
     var outingGeneral = outingGeneralAccessor.GetOutingGeneralByOutingID(outingAccessor.ID); 
     this.OutingName = outingGeneral.Name; 
    } 
    public Guid ID { get; set; } 
    public int OutingNumber { get; set; } 
    public string OutingName { get; set; } 
} 

HTML + जावास्क्रिप्ट

@model string 
<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"> </script> 
<script src="@this.Url.Content("~/Scripts/jquery.signalR.js")" type="text/javascript">  </script> 
<script src="@this.Url.Content("~/Scripts/knockout.js")" type="text/javascript"> </script> 
<script type="text/javascript" src="/signalr/hubs"> </script> 
<script type="text/javascript"> 
    $(function() { 
     function outingDataViewModel() { 
      this.hub = $.connection.outings; 
      this.ID = ko.observable(); 
      this.OutingNumber = ko.observable(); 
      this.OutingName = ko.observable(); 
      //Initializes the view model 
      this.init = function() { 
       this.hub.getOuting('@this.Model'); 
      }; 
      this.hub.updateOuting = function(data) { 
       ID(data.ID); 
       OutingName(data.OutingName); 
       OutingNumber(data.OutingNumber); 
      }; 
     } 
     var vm = new outingDataViewModel(); 
     ko.applyBindings(vm); 
     // Start the connection 
     $.connection.hub.start(function() { vm.init(); }); 
    }); 
</script> 
<h1>Outing Number</h1> 
<div id="OutingSummary"> 
    <div data-bind="text:OutingNumber"></div> 
    <div data-bind="text:OutingName"></div> 
</div> 

आगे डिबगिंग करने पर यह लाइनों में प्रतीत होता है

ID(data.ID); 
OutingName(data.OutingName); 
OutingNumber(data.OutingNumber); 
लू

यह केएस की तरह जब मुझे आईडी सेट करने का प्रयास होता है तो मुझे "undefined_method" का अपवाद मिल रहा है। क्या यह किसी और के लिए समझ में आता है?

+0

क्या आपको नॉकआउट से पहले jQuery संदर्भित करने की आवश्यकता नहीं है? –

+0

यदि आप नॉकआउटजेएस के साथ जेक्यूरी टेम्पलेट्स का उपयोग कर रहे हैं, तो आपको केवल jQuery की आवश्यकता है, अन्यथा नॉकआउटजेएस की कोई निर्भरता नहीं है। –

+0

अच्छी पकड़, लेकिन यह वास्तव में आंशिक दृश्य है और मास्टर व्यू में jquery संदर्भ है। मैंने कोड स्निपेट में jquery संदर्भ जोड़ा ताकि किसी भी झूठी सकारात्मक उत्तरदाताओं को न उठाएं ... उस विचार के लिए बहुत कुछ। मैं जल्द ही उदाहरण ठीक कर दूंगा। – PlTaylor

उत्तर

8

आप समस्या कहां में सही हैं। सर्वर updateOuting प्रणाली को बुलाती है और आप कोड चलाते हैं:

ID(data.ID); 
OutingName(data.OutingName); 
OutingNumber(data.OutingNumber); 

यह जहां आईडी, OutingName और OutingNumber देखने के लिए पता नहीं है। आपको यह निर्दिष्ट करने की आवश्यकता है कि ये दृश्य मॉडल ऑब्जेक्ट पर मौजूद हैं। एक समाधान जो आपकी समस्या हल करता है, निम्नलिखित में जावास्क्रिप्ट कोड को बदलना होगा:

<script type="text/javascript"> 
    $(function() { 
     function outingDataViewModel() { 
      var self = this; 
      self.hub = $.connection.outings; 
      self.ID = ko.observable(); 
      self.OutingNumber = ko.observable(); 
      self.OutingName = ko.observable(); 
      //Initializes the view model 
      self.init = function() { 
       self.hub.getOuting('@Guid.NewGuid().ToString()'); 
      }; 
      self.hub.updateOuting = function (data) { 
       self.ID(data.ID); 
       self.OutingName(data.OutingName); 
       self.OutingNumber(data.OutingNumber); 
      }; 
     } 
     var vm = new outingDataViewModel(); 
     ko.applyBindings(vm); 
     // Start the connection 
     $.connection.hub.start(function() { vm.init(); }); 
    }); 
</script> 

आशा है कि इससे मदद मिलती है!

+0

मैं सुबह की पहली चीज़ कोशिश करूंगा। हालांकि यह वास्तव में अच्छा लग रहा है। – PlTaylor

+0

यूप ने काम किया। आपकी सहायता के लिए धन्यवाद. – PlTaylor

संबंधित मुद्दे