Как плохо это должно поместить JavaScript за пределами заголовка?

Вы можете использовать шаблон Делегирования, чтобы уведомить об изменениях названия в вашем контроллере представления.

Добавьте протокол:

protocol DropDownButtonDelegate: AnyObject {
    func titleDidChange(_ newTitle: String)
}

Добавьте в свой класс DropDownButton свойство делегата:

weak var delegate: DropDownButtonDelegate?

Затем в функции dropDownPressed:

func dropDownPressed(string: String) {
    self.setTitle(string, for: .normal)
    self.dismissDropDown()
    delegate?.titleDidChange(string)
}

И наконец, в вашем представлении контроллер реализует DropDownButtonDelegate:

class ViewController: UIViewController, GMSMapViewDelegate {

    override func viewDidLoad() {
      super.viewDidLoad()

      let typeBTN = dropDownBtn()
      self.view.addSubview(typeBTN)
      typeBTN.delegate = self 
      typeBTN.setTitle("animal", for: .normal)
      typeBTN.dropView.dropDownOptions = ["dog", "cat", "cow", "boy"]
    }
}

extension ViewController: DropDownButtonDelegate {
    func titleDidChange(_ newTitle: String) {
        print(newTitle)
    }
}
10
задан fmsf 25 February 2009 в 00:32
поделиться

3 ответа

Это прекрасно подходит для размещения JavaScript в тело. Существует даже такая вещь как "встроенный" JavaScript. Просто не переусердствуйте его. Если можно упаковать сценарии в отдельный файл (который не всегда возможен), он сделает код более удобным в сопровождении.

2
ответ дан 3 December 2019 в 15:53
поделиться

Существуют хорош плохие причины сделать это.

ХОРОШИЙ), Если сценарий не очень важен для конструкции Вашей страницы DOM, хорошо сделать это уже в возможном, как Jim Puls предполагает, обычно в самом конце страницы в корневом узле ТЕЛА. Это хорошо, потому что это позволяет XHTML сразу представить, создавая психологический эффект, который страница "загружает быстрее". В действительности это загружается на той же скорости за исключением того, что браузер не тратит загрузку циклов ЦП, интерпретацию и выполнение JS, в то время как пользователь уставился на белое окно браузера.

ПЛОХО) Теги script обычно загружаются интерпретируемый в порядке, который они включаются. Это означает, что необходимо управлять тщательно порядком, в который они включены. Кроме того, потому что они загружаются последовательно (по одному), Вы оплачиваете высокую стоимость за каждый дополнительный файл, на который Вы ссылаетесь, потому что браузер должен установить соединение, проверьте кэш, загрузите и т.д. Приемы, такие как "DEFFER" IE не являются стандартными. Поэтому я настоятельно рекомендовал бы упаковку Вашего JavaScript в единственный файл, когда Вы идете от разработки до производства так, чтобы пользователи не устанавливали многочисленные связи в сериале. Также удостоверьтесь, что у Вас есть gzip включенное сжатие.

ХОРОШИЙ) существует путь к сценариям ленивой загрузки с помощью Ajax - Вы называете Ваш разъединять просьбу о JS и генерируете событие, когда файл загружается. Можно затем назвать оценку на нем (или некоторый более безопасный вариант), который приносит его символы в объем. Это позволяет параллельные загрузки сценария.

ХОРОШИЙ и ПЛОХОЙ) В IE, необходимо постараться не управлять деревом DOM, прежде чем DOM полностью загрузился. Ищите 'dom:loaded' событие для этого.

1
ответ дан 3 December 2019 в 15:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: