我想在Ruby on Rails应用程序中记录用户的操作.
到目前为止,我有一个模型观察器,它在更新和创建后将日志插入数据库.为了存储哪个用户执行了记录的操作,我需要访问会话,但这是有问题的.
首先,它打破了MVC模型.其次,技术范围从hackish到outlandish,甚至可能甚至将实现绑定到Mongrel服务器.
什么是正确的方法?
我看到了一些关于在同一个类中添加观察者和句柄的例子,但我想知道的是,是否可以在第一个视图控制器中添加观察者并在第二个视图控制器中处理它?
我希望不断从第一个视图控制器发送距离并在第二个控制器中处理它.第二个视图控制器添加为子视图:addSubview,addChildViewController.
它就像android中的广播一样.
objective-c observers nsnotification nsnotificationcenter ios
我在emberjs组件中有一个场景,其中观察不会被击中.我发现原因是"当设置了被观察的组件属性时,组件尚未插入."
我的问题是,在ember js中这可以用更好的方式处理吗?
更好的解释可以在下面的jsbin中找到.
到目前为止我所拥有的是:
Observer.h
class Observer
{
public:
~Observer();
virtual void Notify() = 0;
protected:
Observer();
};
class Observable
{
public:
~Observable();
void Subscribe( std::shared_ptr<Observer> observer );
void Unsubscribe( std::shared_ptr<Observer> observer );
void Notify();
protected:
Observable();
private:
std::vector<std::weak_ptr<Observer>> observers;
};
Run Code Online (Sandbox Code Playgroud)
Observer.cpp
void Observable::Subscribe( std::shared_ptr<Observer> observer )
{
observers.push_back( observer );
}
void Observable::Unsubscribe( std::shared_ptr<Observer> observer )
{
???
}
void Observable::Notify()
{
for ( auto wptr : observers )
{
if ( !wptr.expired() )
{
auto observer = wptr.lock();
observer->Notify();
}
} …Run Code Online (Sandbox Code Playgroud) 我在Magento 2中创建了新表,用于存储自定义promorules,现在我已经为事件创建了观察者controller_action_predispatch_checkout_cart_couponPost,在观察者中我想检查用户是否输入了任何自定义规则,然后根据该规则应用折扣.
以下是我的代码:
<?php
namespace Webkul\Grid\Observer;
use Magento\Framework\Event\ObserverInterface;
class coupenAppliedAfter implements ObserverInterface
{
/**
* @var ObjectManagerInterface
*/
protected $_objectManager;
/**
* @param \Magento\Framework\ObjectManagerInterface $objectManager
*/
public function __construct(
\Magento\Framework\ObjectManagerInterface $objectManager
) {
$this->_objectManager = $objectManager;
}
/**
* customer register event handler
*
* @param \Magento\Framework\Event\Observer $observer
* @return void
*/
public function execute(\Magento\Framework\Event\Observer $observer)
{
// get enetered coupen code
$controller = $observer->getControllerAction();
$couponCode = $controller->getRequest()->getParam('coupon_code');
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$connection = $objectManager->get('Magento\Framework\App\ResourceConnection')->getConnection('\Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION');
// get list of …Run Code Online (Sandbox Code Playgroud) 我一直在通过第三方集成(例如SentryNavigatorObserver,FirebaseAnalyticsObserver)来分析不同的导航观察者,以使默认情况下没有它的工具相同。但我注意到这些都没有真正捕获所有路线转换。当他们在相应的控制台中显示数据时我看到了它。是的,它适用于push/ ,但不会跟踪pop同一级别内的任何转换。go这很烦人。有人知道解决的方法吗?
例如,
观察到从/page到 的转变。/page/detail
/pageA从到 的过渡/pageB则不是。
我在ember.js中遇到以下问题.子控制器依赖于父控制器中的选定值来确定其内容.在数据库中,子项具有parent_id引用.
App.parentsController = Em.ArrayController.create({
content: [],
selected: null
});
App.sonsController = Em.ArrayController.create({
// the value of content depends on the id of
// the selected item in the parentsController
content: [],
selected: null
});
App.daughtersController = Em.ArrayController.create({
// the value of content depends on the id of
// the selected item in the parentsController
content: [],
selected: null
});
Run Code Online (Sandbox Code Playgroud)
我更愿意在没有parentController必须知道其他控制器的情况下解决这个问题.这应该可以通过观察者,绑定甚至通过计算实现,但我不知道从哪里开始.任何帮助将不胜感激.
我设计应该以这种方式工作的观察者模式:观察者调用AddEventListener的方法EventDispatcher,并传递一个字符串,它是的名称event,PointerToItself和PointerToItsMemberMethod
之后event发生在EventDispatcher; 它查看订阅列表,如果有一些,则分配给此事件调用该action方法observer.
我来这里了EventDispatcher.h.小心包含一些伪代码.
这是两个问题:
actionin 的类型struct Subscription?PS:不,我不会使用boost或任何其他库.
#pragma once
#include <vector>
#include <string>
using namespace std;
struct Subscription
{
void* observer;
string event;
/* u_u */ action;
};
class EventDispatcher
{
private:
vector<Subscription> subscriptions;
protected:
void DispatchEvent ( string event );
public:
void AddEventListener ( Observer* observer …Run Code Online (Sandbox Code Playgroud) 我正在与一个两次触发的 LiveData 观察者作斗争。在我的片段中,我观察LiveData如下,使用viewLifeCycleOwnerasLifeCycleOwner
private lateinit var retailViewModel: RetailsViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
retailViewModel = ViewModelProviders.of(this).get(RetailsViewModel::class.java)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
retailViewModel.retailLiveData.observe(viewLifecycleOwner, Observer {
// updating UI here, but firing twice!
}
retailViewModel.getRetailById(retail.id)
}
Run Code Online (Sandbox Code Playgroud)
这是我的视图模型:
class RetailsViewModel(override val service: MyFoodyApiService = MyFoodyApiService.service) :
BaseViewModel(service) {
var retailLiveData: MutableLiveData<Retail> = MutableLiveData()
fun getRetailById(id: Int) {
scope.launch {
try {
val response =
service.getRetailById(authString, id).await()
when (response.isSuccessful) {
true -> {
response.body()?.let { …Run Code Online (Sandbox Code Playgroud) 似乎当我在 DOMContentLoaded 事件上将节点传递给 ResizeObserver.observe() 时,它会立即调用。这是否被视为正常行为?