2016-11-12 2 views
0

Ich verwende .NET, um einige der Felder auf dem Server für jTable zu assemblieren. Mein Problem ist, wie man die geänderte Tabelle nach dem Laden kompiliert, also werden Winkelereignisse zu $scope kompiliert. Ich habe versucht, den gesamten HTML-Körper zu kompilieren, aber es funktioniert nicht. Nichts passiert. Was soll ich machen? Einige Felder müssen auf dem Server zusammengestellt werden. Warum wird $compile($("body"))($scope) den ganzen Körper nicht kompiliert?Angular, wie kompiliert ganze jTable nach dynamischer Belastung vom Server

Mein Gedanke ist, dass was auch immer Element zu DOM hinzugefügt wird, wenn ich den gesamten Dokumentenkörper kompiliere, sollten alle Winkelereignisse an $scope gebunden werden.

Hier kann die Funktion auf dem Server (ng-blur Ereignis wird in das Eingabefeld inputQuantity hinzugefügt):

public JsonResult GetListFromIACC_KEY(int jtStartIndex, int jtPageSize, string orderBy) 
{ 
    List<DTO_CAMERC> listResults = new List<DTO_CAMERC>(); 
     x.Quantity = SetTextBoxFieldInJTable(value: x.Quantity, 
     attribute1: @"id='inputQuantity'", 
     attribute2: @"ng-blur='alert();'"); 
     return x; 
    }).OrderBy(x => x.iMERC_KEY).ToList(); 
    } 
    return Json(new { Result = "OK", Records = listResults, TotalRecordCount = listResults.Count }); 
} 

Funktion zum Erstellen von Eingabefeld:

private string SetTextBoxFieldInJTable(string value = null, string attribute1 = null, string attribute2 = null) 
{ 
    return @"<input type='text' class='cellContent'" + 
    "value='" + value + @"' " + attribute1 + " " + 
    attribute2 + ">"; 
} 

Anruf Client (hier ich habe habe versucht, einen ganzen HTML-Body zu kompilieren, nachdem jTable geladen wurde, aber ID funktioniert nicht - es passiert nichts, wenn das Feld inputQuantity den Fokus verliert:

$http({ 
    method: "POST", 
    url: $scope.UrlSetIACCO_KEY, 
    data: JSON.stringify(model) 
}).then(function success(response) { 

    jQuery('#tblDeliveryList').jtable('load'); 

    //Here I try to compile the whole body, after the jTable has loaded, 
    //but ng-blur is not working 
    $compile($("body"))($scope); 

}, function failure() { 
    alert("Napaka!"); 
}) 
}); 

Tabelle auf dem Client:

jQuery('#tblDeliveryList').jtable({ 
    title: 'Delivery', 
    paging: true, 
    pageSize: 10, 
    sorting: true, 
    defaultSorting: 'cMERC_NME ASC', 
    actions: { 
    listAction: $scope.UrlGetDataFromIACCO_KEY 
    },  
    Quantity: { 
     title: 'Quantity', 
     width: '3%', 
     sorting: false 
    } 
    }) 

Antwort

1

Sie tun, um die Kompilierung falsch. $('body') gibt ein jQuery-Objekt zurück. Was Sie tun müssen, ist HTML-Dom-Objekt für eckig zum Kompilieren zurückzugeben. Außerdem reicht das Kompilieren der jTable-HTML-Datei aus. Versuchen Sie folgendes:

$compile(document.getElementById('tblDeliveryList'))($scope); 
+0

Es gab einen anderen Trick: Ich musste warten, bis Seite gerendert wird. Ich habe herausgefunden, dass diese Seite nicht gerendert wird, wenn das recordsLoaded-Ereignis ausgelöst wird, aber einige Millisekunden später -> deshalb habe ich eine asnyc-Methode verwendet, um einige Millisekunden zu warten und dann $ compile aufzurufen. Danke für deine Antwort. – FrenkyB

Verwandte Themen