我有一个观察员,如果他们缺货就会从购物车中移除物品(即顾客返回购物车的时间x,购物车中的商品已经缺货),并向用户显示消息.
删除项目有效,但更新购物车总数不会. 任何帮助将非常感激!
我的观察者观察sales_quote_save_before事件:
public function checkStockStatus($observer)
{
// return if disabled or observer already executed on this request
if (!Mage::helper('stockcheck')->isEnabled() || Mage::registry('stockcheck_observer_executed')) {
return $this;
}
$quote = $observer->getEvent()->getQuote();
$outOfStockCount = 0;
foreach ($quote->getAllItems() as $item) {
$product = Mage::getModel('catalog/product')->load($item->getProductId());
$stockItem = $product->getStockItem();
if ($stockItem->getIsInStock()) {
// in stock - for testing only
$this->_getSession()->addSuccess(Mage::helper('stockcheck')->__('in stock'));
$item->setData('calculation_price', null);
$item->setData('original_price', null);
}
else {
//remove item
$this->_getCart()->removeItem($item->getId());
$outOfStockCount++;
$this->_getSession()->addError(Mage::helper('stockcheck')->__('Out of Stock'));
}
}
if ($outOfStockCount) > 0) {
$quote->setTotalsCollectedFlag(false)->collectTotals();
}
Mage::register('stockcheck_observer_executed', …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Rails应用程序,我正在使用页面缓存来存储静态html输出.缓存工作正常.但是,我无法使缓存过期.
我相信我的问题部分是因为我没有从控制器到缓存.所有必要的操作都在模型中处理.这看起来应该是可行的,但我发现的所有对基于模型的缓存过期的引用似乎已经过时,或者在其他方面都不起作用.
在我的environment.rb文件中,我正在调用
config.load_paths += %W( #{RAILS_ROOT}/app/sweepers )
Run Code Online (Sandbox Code Playgroud)
我在/ sweepers文件夹中有一个LinkSweeper文件:
class LinkSweeper < ActionController::Caching::Sweeper
observe Link
def after_update(link)
clear_links_cache(link)
end
def clear_links_cache(link)
# expire_page :controller => 'links', :action => 'show', :md5 => link.md5
expire_page '/l/'+ link.md5 + '.html'
end
end
Run Code Online (Sandbox Code Playgroud)
那么...... 为什么在更新模型时不删除缓存页面?(进程:使用脚本/控制台,我从数据库中选择项目并保存它们,但是它们的相应页面没有从缓存中删除),我也在调用通常会调用的链接模型中的特定方法扫地机.两者都不起作用.
如果重要,则缓存文件是Links表中键值的md5哈希值.缓存页面存储为/l/45ed4aade64d427...99919cba2bd90f.html.
从本质上讲,似乎扫地机实际上并没有观察到链路.我还读到(这里)可能只是简单地将sweeper添加到environment.rb中的config.active_record.observers,但这似乎没有做到(我不确定app/sweepers的load_path)在environment.rb中避免了).
我使用rspec,当我运行rake规范时,用户邮件程序通过smtp发送电子邮件,而不是将电子邮件存储在ActionMailer :: Base.deliveries-array中(由用户观察者调用)...
你能给我一个提示吗?
# Rails version
rails -v
=> Rails 3.0.1
# Ruby version with rvm (rvm version 1.0.16)
ruby -v
=> ruby 1.9.2p7 (2010-09-29 revision 29373) [x86_64-darwin10.4.0]
# Gemfile
gem "rspec-rails", ">= 2.0.1"
Run Code Online (Sandbox Code Playgroud)
配置-文件:
# config/environments/test.rb
MyApp::Application.configure do
config.action_mailer.delivery_method = :test
config.action_mailer.raise_delivery_errors = true
end
# spec/spec_helper.rb
...
ENV["RAILS_ENV"] ||= 'test'
...
# app/models/user_observer.rb
class UserObserver < ActiveRecord::Observer
observe User
def after_create(record)
puts Rails.env
# => "test"
UserMailer.new_user_notification(record).deliver
puts ActionMailer::Base.deliveries.inspect
# => []
# Sends it via smtp! …Run Code Online (Sandbox Code Playgroud) 或者他们属于自己的位置?
我试图找出一种方法来记录有人更新对象时的更改.现在我的观察者将存储所有当前值,但我对如何确定哪些字段已更改以及如何将它们存储在我的feed db中感到迷茫.
为简单起见,这里有一个样本模型和观察者.我的目标是跟踪更新的字段并将其存储在Feed数据库中.如果需要,我愿意在我的数据库中添加新字段.如果您有任何疑问,请告诉我.
模型
# Table name: milestones
#
# id :integer not null, primary key
# name :string(255)
# project_id :integer
# target_date :datetime
Run Code Online (Sandbox Code Playgroud)
观察者跟踪变化
class MilestoneObserver < ActiveRecord::Observer
def after_update(milestone)
f = Feed.new(
:action => milestone.name,
:project_id => milestone.project_id,
:updated_by_id => "Jordan")
f.save
end
end
Run Code Online (Sandbox Code Playgroud) 我正在使用Java Swing在Clojure中编写一个桌面GUI应用程序.通常在使用Java时,我将使用Observer模式根据MVC设计模式设计应用程序.通过这种方式,视图与模型分离,并且其中的任何一个中的更改都不会相互影响,从而使更改变得更加容易.
我想知道Clojure是否比普通的MVC和Observer设计模式更好地解决了这个问题?我是函数式编程的新手,所以我不确定如何将模型与视图分开.我需要这个,因为应用程序将迭代开发,并且可能存在更具挑战性的要求.
非常感谢任何帮助.
谢谢,
亚当
model-view-controller design-patterns functional-programming clojure observer-pattern
我有下一个用例:用户登录表格,输入姓名,电子邮件和密码,点击注册按钮.之后系统需要检查电子邮件是否被采用并基于该显示错误消息或创建新用户...
我试图使用Room,ViewModel和LiveData来做到这一点.这是我尝试学习这些组件的一些项目,我没有远程api,我会将所有内容存储在本地数据库中
所以我有这些课程:
所以我的想法是将有一个监听器附加到注册按钮,它将调用RegisterViewModel::register()方法.
class RegisterViewModel extends ViewModel {
//...
public void register() {
validationErrorMessage.setValue(null);
if(!validateInput())
return;
registrationService.performRegistration(name.get(), email.get(), password.get());
}
//...
}
Run Code Online (Sandbox Code Playgroud)
所以这是基本的想法,我也想performRegistration回到我新建的用户.
最困扰我的是我不知道如何performRegistration在服务中实现功能
class UsersRegistrationService {
private UsersRepository usersRepo;
//...
public LiveData<RegistrationResponse<Parent>> performRegistration(String name, String email, String password) {
// 1. check if email exists using repository
// 2. if user exists return RegistrationResponse.error("Email is taken")
// 3. if user does not exists create new user …Run Code Online (Sandbox Code Playgroud) android observer-pattern android-room android-livedata android-architecture-components
我正在开发一个与 Firebase 集成的 React Web 应用程序,并且我正在尝试对我的用户进行身份验证。我已经设置了路线,以便在用户通过身份验证时显示主页组件,否则显示登录页面。但是,当我的应用程序首次加载时,它会显示登录页面,需要一两秒的时间才能识别用户实际上已通过身份验证,然后切换到主页。它看起来很混乱,我猜我没有很好地或足够快地处理 onAuthStateChanged 。在我的 App 组件中,我订阅了一个 ReactObserver,它会在身份验证状态发生更改时发出信号。我该怎么做才能避免这种奇怪的行为?
我的App.js:
import {BrowserRouter, Route} from "react-router-dom";
import Home from "./Home";
import Login from "./Login";
import {loggedIn, firebaseObserver} from "../firebase";
import {useEffect, useState} from "react";
export default function App() {
const [authenticated, setAuthenticated] = useState(loggedIn())
useEffect(() => {
firebaseObserver.subscribe('authStateChanged', data => {
setAuthenticated(data);
});
return () => { firebaseObserver.unsubscribe('authStateChanged'); }
}, []);
return <BrowserRouter>
<Route exact path="/" render={() => (authenticated ? <Home/> : <Login/>)} />
</BrowserRouter>;
}
Run Code Online (Sandbox Code Playgroud)
我的 …
authentication observer-pattern firebase reactjs react-router-dom
在java的Observer模式类Observer和Observable中,调用Observable对象的notifyObservers(Object arg0),在不同的线程中,线程安全吗?
示例:我有多个线程,所有Observable,将经常调用notifyObservers(...).所有这些线程都报告给一个Observer对象.
我是否会遇到并发问题,以及解决这个问题的更好方法是什么?我知道使用事件侦听器的可能解决方案.但是我不确定如何实现它,如果可能的话,我想坚持使用Observer模式实现.
是否有观察员可以用来观察产品从购物车中取出时的事件?我还没找到.
我发现checkout_cart_update_items_after如果通过改变产品数量来移除产品,可以使用哪些产品,但是当用户使用移除按钮时则不能使用.我现在看到的唯一选择checkout_cart_save_after是每当推车改变时使用.当然,这需要定制逻辑来检查哪个产品被删除.不完美.
那么是否有更好的方法来注意删除事件?
observer-pattern ×10
magento ×2
android ×1
android-architecture-components ×1
android-room ×1
cart ×1
clojure ×1
email ×1
firebase ×1
java ×1
model ×1
reactjs ×1
rspec ×1
session ×1
sweeper ×1