77 lines
2.4 KiB
JavaScript
77 lines
2.4 KiB
JavaScript
|
var oldHelpers;
|
||
|
|
||
|
module("Discourse.View", {
|
||
|
setup: function() {
|
||
|
oldHelpers = Ember.Handlebars.helpers;
|
||
|
},
|
||
|
|
||
|
teardown: function() {
|
||
|
Ember.Handlebars.helpers = oldHelpers;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
test("mixes in Discourse.Presence", function() {
|
||
|
ok(Discourse.Presence.detect(Discourse.View.create()));
|
||
|
});
|
||
|
|
||
|
test("registerHelper: enables embedding a child view in a parent view via dedicated, named helper instead of generic 'view' helper", function() {
|
||
|
Discourse.View.registerHelper("childViewHelper", Ember.View.extend({
|
||
|
template: Ember.Handlebars.compile('{{view.text}}')
|
||
|
}));
|
||
|
|
||
|
var parentView = Ember.View.extend({
|
||
|
template: Ember.Handlebars.compile('{{childViewHelper id="child" text="foo"}}')
|
||
|
}).create();
|
||
|
|
||
|
Ember.run(function() {
|
||
|
parentView.appendTo("#qunit-fixture");
|
||
|
});
|
||
|
|
||
|
equal(parentView.$("#child").length, 1, "child view registered as helper is appended to the parent view");
|
||
|
equal(parentView.$("#child").text(), "foo", "child view registered as helper gets parameters provided during helper invocation in parent's template");
|
||
|
});
|
||
|
|
||
|
test("renderIfChanged: rerenders the whole view template when one of registered view fields changes", function() {
|
||
|
var view, rerenderSpy;
|
||
|
|
||
|
var viewRerendersOnceWhen = function(message, changeCallback) {
|
||
|
rerenderSpy.reset();
|
||
|
Ember.run(function() { changeCallback(); });
|
||
|
ok(rerenderSpy.calledOnce, "view rerenders when " + message);
|
||
|
};
|
||
|
|
||
|
var viewDoesNotRerenderWhen = function(message, changeCallback) {
|
||
|
rerenderSpy.reset();
|
||
|
Ember.run(function() { changeCallback(); });
|
||
|
ok(!rerenderSpy.called, "view does not rerender when " + message);
|
||
|
};
|
||
|
|
||
|
|
||
|
view = Ember.View.extend({
|
||
|
shouldRerender: Discourse.View.renderIfChanged("simple", "complex.@each.nested")
|
||
|
}).create({
|
||
|
simple: "initial value",
|
||
|
complex: [Ember.Object.create({nested: "initial value"})],
|
||
|
unregistered: "initial value"
|
||
|
});
|
||
|
|
||
|
rerenderSpy = sinon.spy(view, "rerender");
|
||
|
|
||
|
Ember.run(function() {
|
||
|
view.appendTo("#qunit-fixture");
|
||
|
});
|
||
|
|
||
|
|
||
|
viewRerendersOnceWhen("a simple field (holding a string) changes", function() {
|
||
|
view.set("simple", "updated value");
|
||
|
});
|
||
|
|
||
|
viewRerendersOnceWhen("a nested sub-field of a complex field (holding an array of objects) changes", function() {
|
||
|
view.get("complex").objectAt(0).set("nested", "updated value");
|
||
|
});
|
||
|
|
||
|
viewDoesNotRerenderWhen("unregistered field changes", function() {
|
||
|
view.set("unregistered", "updated value");
|
||
|
});
|
||
|
});
|