2016-07-25 11 views
0

Ich habe einen benutzerdefinierten Datentyp in Umbraco 7.4.3, die einen einfachen Eingang des Typs Nummer hat. Das ist an das Modell gebunden, das das ng-bind Attribut verwendet, aber das Textfeld gibt den Wert nicht wieder.Umbraco Custom DataType mit Zahleneingabe zeigt keinen Wert

NumberTestInput.Editor.html

<div ng-controller="NumberTestInput.NumberTestInputController"> 
    <!--Changing the type to 'text' causes the value to render correctly--> 
    <!--Otherwise, it renders with an empty value--> 
    <input type="number" ng-model="model.value" /> 
</div> 

NumberTestInput.Controller.js

angular.module("umbraco").controller("NumberTestInput.NumberTestInputController", function ($scope) { 

    //Causes value to load on page load, but textbox is blanked out again after publishing 
    //$scope.model.value = parseInt($scope.model.value); 

}); 

package.manifest

{ 
    "propertyEditors": [ 
    { 
     "name": "Number Test Input", 
     "alias": "numberTestInput", 
     "editor": { 
     "hideLabel": false, 
     "isReadOnly": false, 
     "valueType": "INT", 
     "view": "~/App_Plugins/NumberTestInput/NumberTestInput.Editor.html" 
     } 
    } 
    ], 
    "javascript": [ 
    "~/App_Plugins/NumberTestInput/NumberTestInput.Controller.js" 
    ] 
} 

Es scheint ein Problem zu sein, bei dem der Model-Value-Typ auf String anstatt auf eine Zahl gesetzt wird, obwohl ich dieses Setup im Manifest als INT habe und die Werte bei der Eingabe korrekt gespeichert werden. Es ist nur so, dass sie in der Benutzeroberfläche nicht korrekt dargestellt werden. Gibt es etwas, was ich anders machen muss, damit das funktioniert?

+0

Was ist eigentlich der Wert von 'model.value'? – developer033

+0

@ developer033 Es ist ein numerischer Wert. Der Wert selbst wird korrekt gespeichert, wie der Textboxtyp von "Nummer" in "Text" ändert. – Mun

Antwort

0

Gefunden einen Hack, um dies zu umgehen, indem Sie eine neue Eigenschaft zum Umschließen model.value erstellen und erzwingen, um eine Ganzzahl zurückzugeben.

In den Controller

Object.defineProperty(
    $scope, 
    "modelValue", 
    { 
     get: function() { return parseInt($scope.model.value); }, 
     set: function(newValue) { $scope.model.value = newValue; } 
    }); 

Ansicht

<input type="number" ng-model="modelValue" /> 

Die Anzahl Eingabefeld nun auf die neue modelValue Eigenschaft gebunden ist, die den Wert von model.value kehrt als ganze Zahl.

Das fühlt sich aber wie ein Hack an, und hoffentlich gibt es einen besseren Weg, Umbraco kann den richtigen Typ automatisch einstellen.