Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.02.2016, 10:30
Аспирант
Отправить личное сообщение для alexandr2006 Посмотреть профиль Найти все сообщения от alexandr2006
 
Регистрация: 30.01.2013
Сообщений: 54

Не могу передать значение в представление
html

<style>
fieldset {border:0; width:50%;background: grey}
</style>

<form id="todo" style="border:1px solid red; min-height:20px;"></form>
<script type="text/template" id="item-template">
<fieldset>
<input id="todo_complete" type="checkbox" <%=completed ? 'checked="checked"' : '' %>>
</fieldset>
</script>



Модель:
var Todo = Backbone.Model.extend({

defaults :{title:'old',completed: true},
docTitle : 'Todo title'

});

var myTodo = new Todo ({docTitle:'myTodo title',completed: false, title: 'new'});

Представление:
var TodoView = Backbone.View.extend({
//id:'todo',
todoTpl: _.template($('#item-template').html()),
	events: {
		'click':'click_function'
	},
	initialize: function(){
		this.render();
	},
	render: function(){
		this.$el.html ( this.todoTpl ( this.model.toJSON() ) );
		document.title = this.model.docTitle;
		
		return this;
	},
	click_function: function(e){
		console.log(e.target.tagName);
		console.log(this.$el === e.target);
	}
});


var todoTiew = new TodoView({model: myTodo, el :$("#todo")});


Запускаю, но title у страницы почему-то выводится "Todo title", а не "myTodo title" и значение title тоже не меняется. Почему?

Далее когда я щелкаю по тегу форм, console.log(this.$el === e.target); почему-то выдает false. Почему?
Ответить с цитированием
  #2 (permalink)  
Старый 12.02.2016, 10:09
Аватар для armidoll
Кандидат Javascript-наук
Отправить личное сообщение для armidoll Посмотреть профиль Найти все сообщения от armidoll
 
Регистрация: 28.05.2015
Сообщений: 116

Сообщение от alexandr2006 Посмотреть сообщение
Запускаю, но title у страницы почему-то выводится "Todo title", а не "myTodo title" и значение title тоже не меняется. Почему?
this.model.docTitle;

Это свойство объекта, которое в данном случае берется из прототипа (из конструктора) __proto__.docTitle и значение которого было задано в:

var Todo = Backbone.Model.extend({

    defaults : {title:'old', completed: true},
    docTitle : 'Todo title'

});


Оно не было изменено в дальнейшем кодом:
var myTodo = new Todo ({docTitle:'myTodo title',completed: false, title: 'new'});


который записывает значение не в __proto__.docTitle , а в attributes.docTitle

измените (как вариант):

document.title = this.model.docTitle;

на
document.title = this.model.attributes.docTitle;

или через API библиотеки Backbone:
document.title = this.model.get('docTitle');


Сообщение от alexandr2006 Посмотреть сообщение
Далее когда я щелкаю по тегу форм, console.log(this.$el === e.target); почему-то выдает false. Почему?
this.$el содержит ссылку на элемент input#todo_complete
e.target содержит ссылку на элемент form#todo

Это разные объекты, поэтому результат их сравнения через "===" false

Измените временно код на:
click_function: function(e){
        console.log(e.target.tagName);

        console.log('e.target : ');
        console.dir(e.target);

        console.log('this.$el : ');
        console.dir(this.$el);

        console.log(this.$el === e.target);
    }


и посмотрите самостоятельно, что там содержится

Последний раз редактировалось armidoll, 12.02.2016 в 11:29.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать значение переменной из php в js wayzer Элементы интерфейса 8 22.02.2015 21:20
Как передать значение select из формы в переменную javascript 2Step Общие вопросы Javascript 2 11.03.2014 23:11
Как передать значение переменной? maksbp22 Общие вопросы Javascript 0 11.10.2013 16:21
Не могу передать скриптом значение формы youko Элементы интерфейса 1 06.07.2009 19:52
Скрипт калькулятора (не могу добавить еще одно значение) Jee_Day Я не знаю javascript 2 22.05.2009 13:19