Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как вызвать родительский метод?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Bio man
Отправлено: 25 Октября, 2013 - 15:44:13
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Пример
CODE (javascript):
скопировать код в буфер обмена
  1. Backbone.Model.extend({
  2.   get: function(attr)
  3.   {
  4.      // do something
  5.      // return parent here
  6.   }
  7. });
 
 Top
LIME
Отправлено: 25 Октября, 2013 - 15:59:37
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)





?
 
 Top
Bio man
Отправлено: 25 Октября, 2013 - 16:06:49
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




На пхп звучало бы так
 
 Top
LIME
Отправлено: 25 Октября, 2013 - 16:44:09
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




я не совсем понял что надо получить
может этот код поможет?
CODE (javascript):
скопировать код в буфер обмена
  1. var some;
  2. function extend(obj) {
  3.     return obj.get("It's me!");
  4. }
  5. some = extend({
  6.     get: function(attr)
  7.     {
  8.         alert("Hey! " + attr);
  9.         return this;
  10.     }
  11. });
  12. some.get("It's me! 2");
  13. some.get("It's me! 3");
  14. some.get("It's me! 4");
 
 Top
esterio
Отправлено: 25 Октября, 2013 - 16:50:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




LIME здесь backbone.js

Bio man загляните сюда, может поможет
http://stackoverflow[dot]com/questio[dot][dot][dot]lass-in-backbone
 
 Top
LIME
Отправлено: 25 Октября, 2013 - 16:53:08
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




esterio это понятно
хоть я его не знаю но задача вернуть объект
 
 Top
esterio
Отправлено: 25 Октября, 2013 - 17:02:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




также если взглянуть на исходник, то

CODE (javascript):
скопировать код в буфер обмена
  1. _.extend(Model.prototype, Events, {
  2.     get: function(attr) {
  3.        return this.attributes[attr];
  4.     },
  5. })
 
 Top
nerv
Отправлено: 25 Октября, 2013 - 17:46:39
Post Id



Посетитель


Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013  
Откуда: Россия


Помог: 9 раз(а)




Bio man пишет:
Как вызвать родительский метод?

никак, если вы не строили цепочку наследования руками/фреймворком. В js из коробки нет понятий parent/child. Зато есть прототипы )

p.s.: DOM строиться динамически

p.p.s: попробуй загуглить "backbone super child" ("супер" часто используется как ссылка на родителя), если "backbone parent child" не помогает

(Отредактировано автором: 25 Октября, 2013 - 17:50:57)



-----
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
 
 Top
Bio man
Отправлено: 25 Октября, 2013 - 22:04:53
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




LIME, да нет же, задача вызвать родительский метод, а точнее вызвать и вернуть его результат.
esterio, возможно то что надо, буду за компом проверю. Спасибо.
 
 Top
LIME
Отправлено: 26 Октября, 2013 - 06:38:42
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Bio man а что ты понимаешь под родителем?
пример из пхп выше это базовый класс от которого наследуется текущий
а тебе видимо нужна ссылка на внешний скоп
как сказал нерв если сам об этом не позаботился то наверное никак
http://learn[dot]javascript[dot]ru/closures-usage
может это нативно предусмотрено в FW
(Добавление)
и вообще в твоем примере для свежесозданного объекта
CODE (javascript):
скопировать код в буфер обмена
  1. {
  2.   get: function(attr)
  3.   {
  4.      // do something
  5.      // return parent here
  6.   }
  7. }
родителем не будет никто
так что я похоже совсем не понимаю сути вопроса
 
 Top
Panoptik
Отправлено: 26 Октября, 2013 - 08:29:37
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




родительский вызывается поидее как обращение к самому классу родителя по его имени, а потом вызов метода apply

так например, мы пишем chaplinjs фреймворк в основе которого лежит backbone на coffeescript, который наследует классы бекбона, а мы свои классы наследуем от чаплина

так вот вызов родительского метода в кофискрипт будет просто super

пример
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. define [
  3.   'views/base/view'
  4.   'text!templates/project/show.hbs'
  5.   'lib/utils'
  6. ], (View, template, utils) ->
  7.   'use strict'
  8.  
  9.   class ProjectShowView extends View
  10.  
  11.     autoRender: true
  12.     region: 'main_block'
  13.     template: template
  14.     template = null
  15.     id: 'content_block'
  16.  
  17.     initialize: ->
  18.       super
  19.  
  20.     render: ->
  21.       super
  22.  


сгенерированный js получается такой
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) {
  3.   for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; }
  4.   function ctor() { this.constructor = child; }
  5.   ctor.prototype = parent.prototype;
  6.   child.prototype = new ctor;
  7.   child.__super__ = parent.prototype;
  8.   return child;
  9. };
  10. define(['views/base/view', 'text!templates/project/show.hbs', 'lib/utils'], function(View, template, utils) {
  11.   'use strict';  var ProjectShowView;
  12.   return ProjectShowView = (function() {
  13.     __extends(ProjectShowView, View);
  14.     function ProjectShowView() {
  15.       ProjectShowView.__super__.constructor.apply(this, arguments);
  16.     }
  17.     ProjectShowView.prototype.autoRender = true;
  18.     ProjectShowView.prototype.region = 'main_block';
  19.     ProjectShowView.prototype.template = template;
  20.     template = null;
  21.     ProjectShowView.prototype.id = 'content_block';
  22.  
  23.     ProjectShowView.prototype.initialize = function() {
  24.       ProjectShowView.__super__.initialize.apply(this, arguments);
  25.     };
  26.  
  27.     ProjectShowView.prototype.render = function() {
  28.       return ProjectShowView.__super__.render.apply(this, arguments);
  29.     };
  30.  
  31.     return ProjectShowView;
  32.   })();
  33. });
  34.  



обратите внимание на реализацию super. собственно ваш метод __extend генерируется здесь же и назначает свойству className.__super__ прототип родителя, обращение к этому свойству равно обращение к родителю, а там уже вызывайте что хотите

возможно по умолчанию у вас через underscore наследование происходит как-то по другому. можете заглянуть в исходный код, или реализовать с помощью моего примера

(Отредактировано автором: 26 Октября, 2013 - 08:34:00)



-----
Just do it
 
 Top
Bio man
Отправлено: 26 Октября, 2013 - 11:05:36
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




LIME пишет:
родителем не будет никто
Родителем, по идее будет Backbone.Model.
Метод extend (мапится от андерскор) выполняет наследование, если конечно можно так сказать.

Я попробую через прототип и __супер__, если не поможет рассмотрю пример Panoptikа.

Всем спасибо
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB