I am trying to use a Masked Input in a Kendo Template. Can I do so, or do I need it outside of the template? How do I do this? Thanks.
<script id=
"popup_editor"
type=
"text/x-kendo-template"
>
<div class=
"k-edit-label"
>
<label
for
=
"EmpID"
>Employee ID</label>
</div>
<input type=
"text"
name=
"EmployeeID"
data-type=
"number"
data-bind=
"value:EmpID"
data-role=
"numerictextbox"
/>
<div class=
"k-edit-label"
>
<label
for
=
"FirstName"
>First Name</label>
</div>
<input type=
"text"
class=
"k-input k-textbox"
name=
"FirstName"
data-bind=
"value:FirstName"
>
<!-- drop down list editor
for
field:
"FirstName"
-->
<div class=
"k-edit-label"
>
<label
for
=
"LastName"
>Last Name</label>
</div>
<!-- textbox editor
for
field:
"LastName"
-->
<!-- field:
"LastName"
is not included as a grid column -->
<input type=
"text"
class=
"k-input k-textbox"
name=
"LastName"
data-bind=
"value:LastName"
>
<div class=
"k-edit-label"
>
<label
for
=
"DOB"
>DOB</label>
</div>
<!-- datepicker editor
for
field:
"DOB"
-->
<input type=
"text"
name=
"DOB"
data-type=
"date"
data-bind=
"value:DOB"
data-role=
"datepicker"
/>
<div class=
"k-edit-label"
>
<label
for
=
"Phone"
>Phone</label>
</div>
<!-- numeric textbox editor
for
field:
"Age"
-->
<input type=
"text"
class=
"k-input k-textbox"
name=
"Phone"
data-bind=
"value:Phone"
>
</input>
#<script type="text/javascript">#
# jQuery(function () {#
# $("#Phone").mask("(999) 999-9999");#
});
#<\/script>#
<div class=
"k-edit-label"
>
<label
for
=
"LocationPicker"
>Locations</label>
</div>
<input name=
"LocationPicker"
data-bind=
"value:LocID"
data-value-field=
"Value"
data-text-field=
"LocID"
data-source=
"filteredLocationDataSource"
data-role=
"dropdownlist"
/>
<!--textarea id=
"editor"
rows=
"10"
cols=
"30"
data-bind=
"value:Comments"
></textarea>
<input type=
"text"
name=
"Comments"
data-bind=
"value:Comments"
/>-->
<div class=
"k-edit-label"
>
<label
for
=
"Modified"
>Modified</label>
</div>
<!-- datepicker editor
for
field:
"DOB"
-->
<input type=
"text"
name=
"Modified"
data-type=
"date"
data-bind=
"value:Modified"
data-role=
"datepicker"
/>
<div class=
"k-edit-label"
>
<label
for
=
"ModifiedBy"
>Modified By</label>
</div>
<!-- datepicker editor
for
field:
"Modified By"
-->
<input type=
"text"
name=
"ModifiedBy"
data-type=
"number"
data-bind=
"value:ModifiedBy"
data-role=
"numerictextbox"
/>
</script>
10 Answers, 1 is accepted
0
Hi Jesse,
The initialization approach which you are currently trying to use is not supported.
Where this template is used? If it is a Grid popup editor template you can initialize the widgets inside it via data attributes. This approach is actually valid for each scenario where the template is bound to a ViewModel via Kendo MVVM.
Regards,
Alexander Valchev
Telerik
The initialization approach which you are currently trying to use is not supported.
Where this template is used? If it is a Grid popup editor template you can initialize the widgets inside it via data attributes. This approach is actually valid for each scenario where the template is bound to a ViewModel via Kendo MVVM.
Regards,
Alexander Valchev
Telerik
Join us on our journey to create the world's most complete HTML 5 UI Framework - download Kendo UI now!
0
Jesse
Top achievements
Rank 1
answered on 29 Apr 2014, 03:22 PM
Yes, I am definitely using it in a Popup Editing Window. Thank you for the information about the data attributes. I will look into that. Thanks. :)
0
Jesse
Top achievements
Rank 1
answered on 04 May 2014, 01:28 AM
I can't seem to get the jQuery mask to show up on the input in the Editor Template. Any ideas on how to attach the data attribute? Is each attribute attached to a different event? Thanks.
0
Jesse
Top achievements
Rank 1
answered on 04 May 2014, 01:31 AM
This is what I would be trying to do. The jQuery mask needs to be attached to the Phone textarea. Thanks.
<script id=
"popup_editor"
type=
"text/x-kendo-template"
>
<div class=
"k-edit-label"
>
<label
for
=
"EmpID"
>Employee ID</label>
</div>
<input type=
"text"
name=
"EmployeeID"
data-type=
"number"
data-bind=
"value:EmpID"
data-role=
"numerictextbox"
/>
<div class=
"k-edit-label"
>
<label
for
=
"FirstName"
>First Name</label>
</div>
<input type=
"text"
class=
"k-input k-textbox"
name=
"FirstName"
data-bind=
"value:FirstName"
>
<!-- drop down list editor
for
field:
"FirstName"
-->
<div class=
"k-edit-label"
>
<label
for
=
"LastName"
>Last Name</label>
</div>
<!-- textbox editor
for
field:
"LastName"
-->
<!-- field:
"LastName"
is not included as a grid column -->
<input type=
"text"
class=
"k-input k-textbox"
name=
"LastName"
data-bind=
"value:LastName"
>
<div class=
"k-edit-label"
>
<label
for
=
"DOB"
>DOB</label>
</div>
<!-- datepicker editor
for
field:
"DOB"
-->
<input type=
"text"
name=
"DOB"
data-type=
"date"
data-bind=
"value:DOB"
data-role=
"datepicker"
/>
<div class=
"k-edit-label"
>
<label
for
=
"Phone"
>Phone</label>
</div>
<!-- numeric textbox editor
for
field:
"Age"
-->
<div id=
"container"
>
<input type=
"text"
name=
"Phone"
data-type=
"string"
data-bind=
"value:Phone"
data-init=
"phoneMask"
>
</input>
</div>
<div class=
"k-edit-label"
>
<label
for
=
"LocationPicker"
>Locations</label>
</div>
<input name=
"LocationPicker"
data-bind=
"value:LocID"
data-value-field=
"Value"
data-text-field=
"LocID"
data-source=
"filteredLocationDataSource"
data-role=
"dropdownlist"
/>
<!--textarea id=
"editor"
rows=
"10"
cols=
"30"
data-bind=
"value:Comments"
></textarea>
<input type=
"text"
name=
"Comments"
data-bind=
"value:Comments"
/>-->
<div class=
"k-edit-label"
>
<label
for
=
"Modified"
>Modified</label>
</div>
<!-- datepicker editor
for
field:
"DOB"
-->
<input type=
"text"
name=
"Modified"
data-type=
"date"
data-bind=
"value:Modified"
data-role=
"datepicker"
/>
<div class=
"k-edit-label"
>
<label
for
=
"ModifiedBy"
>Modified By</label>
</div>
<!-- datepicker editor
for
field:
"Modified By"
-->
<input type=
"text"
name=
"ModifiedBy"
data-type=
"number"
data-bind=
"value:ModifiedBy"
data-role=
"numerictextbox"
/>
</script>
<!-- </div>-->
<script type=
"text/javascript"
>
var
phoneMask = jQuery(
function
($) {
$(
"#Phone"
).mask(
"(999) 999-9999"
);
});
kendo.init(
"#container"
);
</script>
0
Jesse
Top achievements
Rank 1
answered on 05 May 2014, 02:57 AM
Can anyone help me? I am trying to get this project wrapped up as soon as possible. Thanks.
0
Hello Jesse,
You cannot have nested script tags - this isn't valid HTML. Remove the nested script element from your template.
To initialize the jquery mask you need to handle the edit event of the grid:
function onEdit(e) {
e.container.find("#Phone").mask();
}
Also make sure you have set the id attribute of the phone input otherwise $("#Phone") will not find anything:
Regards,
Atanas Korchev
Telerik
You cannot have nested script tags - this isn't valid HTML. Remove the nested script element from your template.
To initialize the jquery mask you need to handle the edit event of the grid:
function onEdit(e) {
e.container.find("#Phone").mask();
}
Also make sure you have set the id attribute of the phone input otherwise $("#Phone") will not find anything:
<input type=
"text"
id="Phone" name=
"Phone"
data-type=
"string"
data-bind=
"value:Phone"
data-init=
"phoneMask"
>
Regards,
Atanas Korchev
Telerik
Join us on our journey to create the world's most complete HTML 5 UI Framework - download Kendo UI now!
0
Jesse
Top achievements
Rank 1
answered on 07 May 2014, 06:25 AM
Okay, I have this now and the Edit Template doesn't work now. The Update and Cancel buttons don't work anymore. I also tried without the jQuery script that you see in the code:
Thank you for all of your help, and keeping trying to help me. I appreciate all of it. This is truly the last part of the project I have to complete. Thanks. :)
Sincerely,
Jesse Kircher
var
templateHTML = $(
"#popup_editor"
).html();
$(document).ready(
function
() {
$.when(getLocationsAsync(), getLocationsFilteredAsync()
/*, getNoteCountAsync()*/
).done(
function
(locations, filteredLocations
/*, noteCountRollup*/
) {
var
filteredLocationDataSource =
new
kendo.data.DataSource({
data: filteredLocations,
schema: {
model: {
fields: {
Value: { type:
"number"
},
Text: { type:
"string"
},
}
}
}
});
$(
"#grid"
).kendoGrid({
dataSource: {
type:
"odata"
,
serverFiltering:
true
,
serverPaging:
true
,
serverSorting:
true
,
pageSize: 10,
transport: {
read: {
//dataType: "json"
},
create: {
type:
"POST"
,
dataType:
"json"
},
update: {
url:
function
(data) {
return
"http://localhost/EmployeeDataService.svc/Employees("
+ data.EmpID +
")"
;
},
type:
"PUT"
,
dataType:
"json"
},
destroy: {
url:
function
(data) {
return
"http://localhost/EmployeeDataService.svc/Employees("
+ data.EmpID +
")"
;
},
type:
"DELETE"
,
dataType:
"json"
}
},
model: empModel,
schema:
{
model: empModel
}
},
edit: onEdit,
editable: {
confirmation:
true
,
mode:
"popup"
,
template: templateHTML
},
filterable:
true
,
pageable:
true
,
sortable:
true
,
height: 365,
toolbar: [
"create"
],
detailInit: detailInit,
dataBound:
function
() {
this
.expandRow(
this
.tbody.find(
"tr.k-master-row"
).first());
},
columns:
[
{
field:
"EmpID"
,
filterable:
false
},
{
field:
"LastName"
,
title:
"Last Name"
},
{
field:
"FirstName"
,
title:
"First Name"
,
attributes: { style:
"text-align:left;"
}
},
{
field:
"LocID"
,
title:
"Location Name"
,
attributes: { style:
"text-align:left;"
},
values: locations
},
{
field:
"NoteID"
, title:
"Note Count"
, attributes: { style:
"text-align:center;"
}, template:
"#:noteCount(EmpID,uid)#"
},
//{
// field: "NoteCount",
// title: "Note Count",
// template: noteCountTemplateHTML
//},
//{
// field: "EmpID",
// title: "Note Count",
// attributes: { style: "text-align:center;" },
// values: noteCountRollup
//},
{
field:
"DOB"
, title:
"DOB"
, attributes: { style:
"text-align:right;"
}, template:
'#= kendo.toString(DOB,"MM/dd/yyyy") #'
//template: function (dataItem) {
//return kendo.htmlEncode(kendo.format("{0:MM/dd/yyyy}", new Date(parseInt(dataItem.DOB.substring(6, 19)))));
//}
},
{
field:
"Phone"
,
hidden:
true
},
{
field:
"Modified"
,
hidden:
true
},
{
field:
"ModifiedBy"
,
hidden:
true
},
{
command: [{
name:
"edit"
,
text:
"Edit"
}, {
name:
"destroy"
,
text:
"Delete"
}]
}
]
}
);
});
});
function
onEdit(e) {
e.container.find(
"#Phone"
).mask();
kendo.init(
"#container"
);
}
var
getLocationsAsync =
function
() {
var
deferred = $.Deferred(),
loadLocations =
function
() {
new
kendo.data.DataSource({
type:
"odata"
,
serverPaging:
false
,
transport: {
read: {
url:
"http://localhost/EmployeeDataService.svc/Locations?$select=LocID,Name"
}
}
}).fetch(
function
(data) {
deferred.resolve($.map(data.items,
function
(item) {
return
{
value: item.LocID,
text: item.Name
};
}));
});
};
window.setTimeout(loadLocations, 1);
return
deferred.promise();
};
var
getLocationsFilteredAsync =
function
() {
var
filteredDeferred = $.Deferred(),
loadFilteredLocations =
function
() {
new
kendo.data.DataSource({
type:
"odata"
,
serverPaging:
false
,
transport: {
read: {
url:
"http://localhost/EmployeeDataService.svc/Locations?$select=LocID,Name"
}
},
filter: { field:
"Enabled"
, operator:
"eq"
, value:
true
}
}).fetch(
function
(data) {
filteredDeferred.resolve($.map(data.items,
function
(item) {
return
{
value: item.LocID,
text: item.Name
};
}));
});
};
window.setTimeout(loadFilteredLocations, 1);
return
filteredDeferred.promise();
};
var
empModel = {
id:
"EmpID"
,
fields:
{
EmpID:
{
type:
"number"
,
defaultValue: 0
},
FirstName:
{
type:
"string"
},
LastName:
{
type:
"string"
},
LocID:
{
type:
"number"
},
//NoteID:
// {
// type: "number",
// editable: false,
// hidden: true
// },
DOB:
{
type:
"date"
},
Phone:
{
defaultValue:
"(999) 999-9999"
,
type:
"string"
},
Modified:
{
type:
"date"
},
ModifiedBy:
{
type:
"number"
,
defaultValue: 0
}
}
};
function
noteCount(employeeID, uid) {
new
kendo.data.DataSource({
type:
"odata"
,
transport: {
read: {
}
},
serverPaging:
true
,
serverSorting:
true
,
serverFiltering:
true
,
pageSize: 1,
filter: { field:
"EnteredBy"
, operator:
"eq"
, value: employeeID },
change:
function
()
{
$(
"#grid"
).find(
"[data-uid="
+ uid +
"]"
).children().eq(5).html(
this
.total());
}
}).read();
}
function
detailInit(e) {
$(
"<div/>"
).appendTo(e.detailCell).kendoGrid({
dataSource: {
type:
"odata"
,
transport: {
read: {
}
},
serverPaging:
true
,
serverSorting:
true
,
serverFiltering:
true
,
pageSize: 5,
filter: { field:
"EnteredBy"
, operator:
"eq"
, value: e.data.EmpID }
},
scrollable:
false
,
sortable:
true
,
pageable:
true
,
filterable:
true
,
columns: [
{ field:
"NoteID"
, title:
"NoteID"
, style:
"text-align: right;"
},
{
field:
"Details"
, title:
"Details"
, attributes: { style:
"text-align:left;"
}, template:
function
(dataItem) {
return
kendo.htmlEncode(dataItem.Details.substring(0, 50));
}
},
{
field:
"Entered"
, title:
"Entered"
, attributes: { style:
"text-align: right;"
}, template:
function
(dataItem) {
return
kendo.htmlEncode(kendo.format(
"{0:MM/dd/yyyy hh:mm tt}"
,
new
Date(parseInt(dataItem.Entered.substring(6, 19)))));
}
},
{
command: [{
"name"
:
"ViewDetails"
,
"buttonType"
:
"ImageAndText"
,
"text"
:
"View Details"
,
"click"
: showDetails }]
}
]
});
}
//$("#grid").kendoGrid().dataSource.fetch();
//});
//})(window, jQuery, kendo)
</script>
<!--<div id=
"container"
>-->
<script id=
"popup_editor"
type=
"text/x-kendo-template"
>
<div id=
"container"
>
<div class=
"k-edit-label"
>
<label
for
=
"EmpID"
>Employee ID</label>
</div>
<input type=
"text"
name=
"EmployeeID"
data-type=
"number"
data-bind=
"value:EmpID"
data-role=
"numerictextbox"
/>
<div class=
"k-edit-label"
>
<label
for
=
"FirstName"
>First Name</label>
</div>
<input type=
"text"
class=
"k-input k-textbox"
name=
"FirstName"
data-bind=
"value:FirstName"
>
<!-- drop down list editor
for
field:
"FirstName"
-->
<div class=
"k-edit-label"
>
<label
for
=
"LastName"
>Last Name</label>
</div>
<!-- textbox editor
for
field:
"LastName"
-->
<!-- field:
"LastName"
is not included as a grid column -->
<input type=
"text"
class=
"k-input k-textbox"
name=
"LastName"
data-bind=
"value:LastName"
>
<div class=
"k-edit-label"
>
<label
for
=
"DOB"
>DOB</label>
</div>
<!-- datepicker editor
for
field:
"DOB"
-->
<input type=
"text"
name=
"DOB"
data-type=
"date"
data-bind=
"value:DOB"
data-role=
"datepicker"
/>
<div class=
"k-edit-label"
>
<label
for
=
"Phone"
>Phone</label>
</div>
<!-- numeric textbox editor
for
field:
"Age"
-->
<input type=
"text"
id=
"Phone"
name=
"Phone"
data-type=
"string"
data-bind=
"value:Phone"
data-change=
"phoneMask"
>
</input>
<div class=
"k-edit-label"
>
<label
for
=
"LocationPicker"
>Locations</label>
</div>
<input name=
"LocationPicker"
data-bind=
"value:LocID"
data-value-field=
"Value"
data-text-field=
"LocID"
data-source=
"filteredLocationDataSource"
data-role=
"dropdownlist"
/>
<!--textarea id=
"editor"
rows=
"10"
cols=
"30"
data-bind=
"value:Comments"
></textarea>
<input type=
"text"
name=
"Comments"
data-bind=
"value:Comments"
/>-->
<div class=
"k-edit-label"
>
<label
for
=
"Modified"
>Modified</label>
</div>
<!-- datepicker editor
for
field:
"DOB"
-->
<input type=
"text"
name=
"Modified"
data-type=
"date"
data-bind=
"value:Modified"
data-role=
"datepicker"
/>
<div class=
"k-edit-label"
>
<label
for
=
"ModifiedBy"
>Modified By</label>
</div>
<!-- datepicker editor
for
field:
"Modified By"
-->
<input type=
"text"
name=
"ModifiedBy"
data-type=
"number"
data-bind=
"value:ModifiedBy"
data-role=
"numerictextbox"
/>
</div>
</script>
<script>
var
phoneMask = jQuery(
function
($) {
$(
"#Phone"
).mask(
"(999) 999-9999"
);
});
kendo.init(
"#container"
);
</script>
Thank you for all of your help, and keeping trying to help me. I appreciate all of it. This is truly the last part of the project I have to complete. Thanks. :)
Sincerely,
Jesse Kircher
0
Hello Jesse,
Unfortunately I can't determine the cause of the problem. Perhaps it is due to some JavaScript error. Do you see any errors in your browser developer tools? Can you reproduce the issue in a demo? You can create such a demo in http://trykendoui.telerik.com
Regards,
Atanas Korchev
Telerik
Unfortunately I can't determine the cause of the problem. Perhaps it is due to some JavaScript error. Do you see any errors in your browser developer tools? Can you reproduce the issue in a demo? You can create such a demo in http://trykendoui.telerik.com
Regards,
Atanas Korchev
Telerik
Join us on our journey to create the world's most complete HTML 5 UI Framework - download Kendo UI now!
0
Jesse
Top achievements
Rank 1
answered on 07 May 2014, 07:08 PM
Yes, you are right. There IS a problem wioth the javascript. Apparently, it is actually executing the Mask function, but due to the template or field, the field doesn't have a length property. Is there some data attribute I need to add into the template to make sure that the input field has a Length? I have attached the screenshot. Thanks.
0
Hello Jesse,
I am afraid I am not sure what the problem is and can't help without a reproduction.
Regards,
Atanas Korchev
Telerik
I am afraid I am not sure what the problem is and can't help without a reproduction.
Regards,
Atanas Korchev
Telerik
Join us on our journey to create the world's most complete HTML 5 UI Framework - download Kendo UI now!